K8S环境的Jenkin性能问题处理
环境信息
在K8S环境通过helm部署了Jenkins(namespace为helm-jenkins),用于日常Java项目构建:
- kubernetes:1.15
- jenkins:2.190.2
- helm版本:2.16.1
如果您想了解helm部署Jenkins的详情,请参考《》
问题描述
在Jenkins任务密集时,Jenkins页面响应缓慢,偶尔有白屏情况发生(稍后自动回复),而且构建速度也明显变缓,查看具体的数据:
- K8S环境已装了metrics-server,用命令kubectl top pod --all-namespaces可以看到Jenkins所占内存仅有410兆,如下图:

- Jenkins是Java应用,在处理大量任务的时候,410兆的内存应该是不够的,JVM内存不足会导致频繁的垃圾回收,接下来顺着这个思路去看JVM内存情况;
- 由上图可知pod名为my-jenkins-74bcdfc566-lmhnw,通过kubectl describe pod my-jenkins-74bcdfc566-lmhnw -n helm-jenkins查看此pod详情:

- 由上图红框1可知此pod运行在node3节点,红框2显示对应的docker容器ID为f9ae211abe99(前12位);
- 去node3机器上执行docker ps,果然发现了ID为f9ae211abe99的容器,如下图:

- 执行命令docker exec f9ae211abe99 jps查看容器内所有java进程的PID,如下图,可见Jenkins服务在容器内的PID等于6:

- 知道了容器ID和java进程的PID,就可以查看JVM信息了,执行命令docker exec f9ae211abe99 jstat -gcutil 6 3s 99查看GC情况,如下图,除了YGC频繁,还出现了FGC:

- 再用命令docker exec f9ae211abe99 jmap -heap 6查看JVM内存情况,如下图,年轻代太小了,只有100兆:

- 最后用命令docker exec f9ae211abe99 ps -ef | grep java查看该进程的启动命令,如下图,可见启动该java进程时并有指定内存参数:

- 在观察内存参数的过程中,ID为f9ae211abe99的容器突然不见了,取而代之的是一个ID为7f1f94d79e46新容器,如下图所示:
11. 执行命令kubectl get event -n helm-jenkins查看该命名空间的所有事件,如下图红框所示,发现原来是探针不响应迫使K8S重启该pod:

对当前系统的诊断已经完成,根据前面的信息可以推测:JVM内存太小,YGC频繁,甚至会有FGC出现,系统响应过慢还可能导致K8S探针判断容器不健康,引发docker容器被删除后重新创建,接下来就调整JVM参数,验证推测是否正确;
调整参数
- 宿主机节点有16G物理内存,没有其他业务,因此打算划分8G内存给Jenkins;
- 执行命令kubectl edit deployment my-jenkins -n helm-jenkins,编辑jenkins的deployment,找到JAVA_OPTS参数的位置,在下面增加value,如下图红框所示:

- 找到docker容器ID后,执行命令docker exec 591dc47d4d57 jmap -heap 6查看JVM内存,如下图所示,堆上限已经达到8G,年轻代是3686兆(调整前只有106兆)

- 并发执行任务一段时间后,观察GC情况发现并不频繁:

- 再来看看该进程的启动命令,执行命令docker exec 591dc47d4d57 ps -ef|grep java,如下图红框所示 ,刚才设置的内存参数已经被用在启动命令中了:

- 运行一段时间,确认任务可正常执行,页面操作也比较流畅,查看K8S事件,再也没有出现pod重启的事件;
关于修改参数的方法
除了kubectl edit命令,还可以将helm的Jenkins配置信息全部下载到本地,修改配置后再部署Jenkins服务,如果您想了解更多,请参考《》
至此,K8S环境下Jenkins性能问题处理已经完成,希望能给您带来一些参考;
https://github.com/zq2599/blog_demos
K8S环境的Jenkin性能问题处理的更多相关文章
- K8S环境的Jenkin性能问题处理续篇(任务Pod设置)
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos K8S环境的Jenkin性能问题处理 本文是<K ...
- K8S环境的Jenkin性能问题描述
Return Homezq2599 CnBlogsHomeContactAdminPosts - 75 Articles - 0 Comments - 16 K8S环境的Jenkin性能问题处理 环境 ...
- 记录一次k8s环境尝试过程(初始方案,现在已经做过很多完善,例如普罗米修斯)
记录一次Team k8s环境搭建过程(初始方案,现在已经做过很多完善,例如普罗米修斯) span::selection, .CodeMirror-line > span > span::s ...
- [原] KVM 环境下MySQL性能对比
KVM 环境下MySQL性能对比 标签(空格分隔): Cloud2.0 [TOC] 测试目的 对比MySQL在物理机和KVM环境下性能情况 压测标准 压测遵循单一变量原则,所有的对比都是只改变一个变量 ...
- Jenkins指定tag发布到k8s环境
Jenkins指定tag发布到k8s环境 1.Jenkins配置一个Pipeline 工程 首先要安装插件:https://www.cnblogs.com/Dev0ps/p/9125232.html ...
- spring-cloud-kubernetes服务发现之在k8s环境下开发spring cloud应用
通常情况下,我们的线上的服务在迁移到k8s环境下的时候,都是采用平滑迁移的方案.服务治理与注册中心等都是采用原先的组件.比如spring cloud应用,在k8s环境下还是用原来的一套注册中心(如eu ...
- CentOS7.6部署k8s环境
CentOS7.6部署k8s环境 测试环境: 节点名称 节点IP 节点功能 K8s-master 10.10.1.10/24 Master.etcd.registry K8s-node-1 10.10 ...
- 清理rancher、k8s环境
清理rancher.k8s环境 待办 https://blog.csdn.net/CSDN_duomaomao/article/details/77684571
- k8s环境部署本地.net core web项目
上一篇文章,我们部署了docker+k8s环境,简单测试通过,但是,还没能将我们自己的项目部署上去,继续记录部署踩坑过程. 一.准备工作 1.当然是docker+k8s环境了,详情请看上一篇文档 ht ...
随机推荐
- 2个案例带你快速实现Response返回值
今天先来学习一下Response的相关知识. 所有返回前台的内容其实都应该是Response的对象或者其子类,我们看到如果返回的是字符串直接可以写成return u'字符串内容'的形式,但是其实这个字 ...
- 【Pod Terminating原因追踪系列之三】让docker事件处理罢工的cancel状态码
本篇为Pod Terminating原因追踪系列的第三篇,前两篇分别介绍了两种可能导致Pod Terminating的原因.在处理现网问题时,Pod Terminating属于比较常见的问题,而本系列 ...
- type类型为number的input标签可以输入字母e
主要原因是:e在数学上代表的是无理数,是一个无限不循环的小数,其值约为2.7182818284,所以在输入e的时候,输入框会把e当成一个数字看待. 可以采用下面的方式来避免这个BUG,在input标签 ...
- Win10 第三方浏览器无法上网或者上网速度慢 的终极解决方案
请参考: https://blog.csdn.net/shouzei123/article/details/82862478 近期,工程师收到大量反馈360浏览器,极速模式无法打开网页,兼容模式无此问 ...
- POJ-3255-Roadblocks(次短路的另一种求法)
Bessie has moved to a small farm and sometimes enjoys returning to visit one of her best friends. Sh ...
- 20190930-01 Redis的事务 000 031
- 阿里云前端路线 | CSS快速掌握
1.1什么是CSS 翻译为“层叠样式表”或者“级联样式表”, 简称样式表. 1.2CSS的主要作用 它主要是用来给HTML网页来设置外观或者样式 外观或者样式:HTML网页中的文字的大小.颜色.字体, ...
- TIKTOK 美国制裁
今天在B站上看了沈教授和李自然说关于TIKTOK对于美国的声明采取的做法的一些看法.其实对于他们的看法,我觉得没有对错之分.正像两个新发的观点,在没有得到历史的验证前,谁也不会承认谁错了.更多的是两个 ...
- [源码分析] OpenTracing之跟踪Redis
[源码分析] OpenTracing之跟踪Redis 目录 [源码分析] OpenTracing之跟踪Redis 0x00 摘要 0x01 总体逻辑 1.1 相关概念 1.2 埋点插件 1.3 总体逻 ...
- [LeetCode]152. 乘积最大子序列(DP)
题目 给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数). 示例 1: 输入: [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] 有最大乘积 6. 示 ...