K8S 环境的 Jenkin 性能问题处理续篇 (任务 Pod 设置)
欢迎访问我的 GitHub
这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos
K8S 环境的 Jenkin 性能问题处理
本文是《K8S环境的Jenkin性能问题处理》的续篇,上一篇解决了 Jenkins 集群中的 Master 节点的性能问题,但是真正执行任务的并非 Master 节点,而是为每个任务临时创建的 Pod,这些 Pod 的性能问题决定着任务的快慢甚至成败;
环境信息
硬件:三台 CentOS 7.7 服务器
kubernetes:1.15
JDK:1.8.0_141
maven:3.6.3
在 K8S 环境部署和使用 Jenkins 的细节请参考《Helm部署和体验jenkins》
任务节点的性能问题
Java 程序员常用 Jenkins 编译构建 Maven 项目,如果构建参数用的是默认配置,很容易出现性能问题,接下来就用开源项目来重现此问题:
在配置 Jenkins 的 kubernetes 插件时,给任务 pod 分配的内存是 1G,如下图:
接下来从 GitHub 下载 Flink 的源码(1.8.3-rc3 版本),然后编译构建,本次任务对应的 pipeline 源码如下:
在执行编译构建任务过程中,点击下图红框中的灰色圆球,即可跳转到执行任务的 Pod 的日志页面:
下图就是 Pod 日志页面,红框内显示任务出现了异常,(此时正在执行单元测试用例)
如下图红框所示,执行任务的 Pod 显示为离线状态:
此时登录到 kubernetes 环境,查看 Pod 状态,如下图红框所示,执行任务的 Pod 状态为 OOMKilled,看来是内存不足导致 Podl 被销毁了:
第一次调节(K8S 参数)
由于 Pod 内存过小导致任务失败,可以在 Jenkins 的设置页面调节 Pod 内存,如下图所示,这次设置到 6G,注意不要超出宿主机的硬件配置:
重复执行一次上述任务,这一次内存充足因而构建成功;
观察
由于本次任务主要是执行 maven 编译构建,因此有必要了解一下 maven 进程的内存使用情况:
在任务执行的过程中,找到 Pod 对应的 docker 容器( kubectl describe pod xxx 命令),ID 是 22484d8b1e56
执行 docker exec 22484d8b1e56 jps 得到 maven 进程 ID 为 87 (名称为 Launcher 的那个),如下图:
执行 docker exec 22484d8b1e56 jmap -heap 87 可以看到 maven 进程的 JVM 内存情况,如下图,可见 maven 实际使用内存只有 3G 左右:
此时 Pod 有 6G 内存,可以通过参数设置给 maven 进程更多内存;
第二次调节(JVM 参数)
接下来尝试设置 maven 进程的内存参数, 这里将大部分内存划分给老年代试试 :
如下图,进入设置页面:
如下图,找到 Pod Templates ,新增环境变量,键是 MAVEN_OPTS ,值是 -Xms5632m -Xmx5632m -Xmn512m -Xss256k ,由于 Pod 总内存是 6G,因此经过此设置后,整个 Pod 的系统内存只剩 512m ,其余 5632m 内存全部划分给 maven 进程,并且 maven 进程的年轻代只有 512m,将所有内存都留给了老年代:
保存设置后再次执行任务,先找到任务 Pod 对应的 docker 容器,再用 jmap -heap 命令查看 maven 进程的内存情况,如下图,5632m 内存全部划分给了 maven 进程,并且年轻代也控制在 512m:
下图是执行 jstat 命令查看 maven 进程的 GC 情况,红框中是 YGC 次数,蓝框中是 FGC 次数,由于年轻代内存过小导致频繁 YGC,不过 FGC 次数不多:
在构建过程中还发生过 StackOverflow 异常,如下图所示,解决办法依旧是调节参数 MAVEN_OPTS ,值是 -Xms5632m -Xmx5632m -Xmn512m -Xss512k ,也就是将线程栈内存放大一倍:
上述设置并非最优,而是验证 MAVEN 内存参数的调节可以生效;
通过 Jenkins 设置页面对任务的 Pod 以及对应的 maven 进程的自定义设置已完成,希望本文能给您一些参考,帮助您根据项目的特点做针对性的调节和优化;
欢迎关注 InfoQ:程序员欣宸
版权声明: 本文为 InfoQ 作者【程序员欣宸】的原创文章。
原文链接:【http://xie.infoq.cn/article/06395dff348943d407f798945】。文章转载请联系作者。
评论