K8S 环境的 Jenkin 性能问题处理续篇 (任务 Pod 设置)
Java 程序员常用 Jenkins 编译构建 Maven 项目,如果构建参数用的是默认配置,很容易出现性能问题,接下来就用开源项目来重现此问题:
在配置 Jenkins 的 kubernetes 插件时,给任务 pod 分配的内存是 1G,如下图:
接下来从 GitHub 下载 Flink 的源码(1.8.3-rc3 版本),然后编译构建,本次任务对应的 pipeline 源码如下:
pipeline {
agent {
label 'my-jenkins-jenkins-slave'
}
tools {
maven 'mvn-3.6.3'
}
stages {
stage('Checkout') {
steps {
echo '从 GitHub 下载 flink 工程的源码(1.8.3-rc3 归档包)'
sh 'wget https://codeload.github.com/apache/flink/tar.gz/release-1.8.3-rc3'
echo '下载结束,解压归档包'
sh 'tar -zxf release-1.8.3-rc3'
}
}
stage('Build') {
steps {
echo '开始编译构建'
sh 'cd flink-release-1.8.3-rc3 && mvn clean package -U -s /home/jenkins/settings/settings.xml'
}
}
}
}
在执行编译构建任务过程中,点击下图红框中的灰色圆球,即可跳转到执行任务的 Pod 的日志页面:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200329165402481.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JvbGluZ19jYXZhbHJ5,s
ize_16,color_FFFFFF,t_70)
下图就是 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 进程更多内存;
评论