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 ...
随机推荐
- 03.AOF持久化机制配置与工作流程
一.AOF持久化的配置 配置文件redis.conf,AOF持久化默认是关闭的,默认是打开RDB持久化 appendonly yes 二.工作流程: 打开AOF持久化机制之后,redis每次接 ...
- 关于idea中SpringBoot启动失败的坑
很多时候你新建了Maven 或者SpringBoot 工程,激动的点了主启动类,你就发现了下面的错误 Error starting Tomcat context. Exception: org.spr ...
- 入门的艰难——关于LR的使用
这年头做一件事真是TM不容易啊.做测试也很纠结,不是都说商业工具很强大么,我去,这个不支持那个不支持的,这还有什么搞头,还非要按照你说的这个版本的才行,高一点的就crash了,结果连最初级的录制脚本都 ...
- 小白也能弄懂的卷积神经网络(Convolutional Neural Networks )
本系列主要是讲解卷积神经网络 - Convolutional Neural Networks 的系列知识,本系列主要帮助大家入门,我相信这是所有入门深度学习的初学者都必须学习的知识,这里会用更加直接和 ...
- Git 实用操作:撤销 Commit 提交
有的时候,改完代码提交 commit 后发现写得实在太烂了,连自己的都看不下去,与其修改它还不如丢弃重写.怎么操作呢? 使用 reset 撤销 如果是最近提交的 commit 要丢弃重写可以用 res ...
- python sha256 键值对参数格式接口测试
# coding=utf-8 import requests import time import uuid import hashlib import hmac import random impo ...
- [Spark]Spark、Yarn 入门
Spark在集群上的运行模式 链接: http://spark.apache.org/docs/latest/cluster-overview.html Component章节 总结: 1 Each ...
- [LeetCode]695. 岛屿的最大面积(DFS/BFS)、200. 岛屿数量(DFS/BFS待做/并差集待做)
695. 岛屿的最大面积 题目 给定一个包含了一些 0 和 1的非空二维数组 grid , 一个 岛屿 是由四个方向 (水平或垂直) 的 1 (代表土地) 构成的组合.你可以假设二维矩阵的四个边缘都被 ...
- 使用U盘的PE系统安装Windows10操作系统 - 初学者系列 - 学习者系列文章
今天闲来无事,就把windows 10的安装再重写一个文(以前写过一个:安装免费的正版Windows10操作系统 - 初学者系列 - 学习者系列文章 ). 1. 制作一个WinPE的U盘. 相信现 ...
- k8s service对象
k8s service对象 概述 service服务也是Kubernetes里核心字眼对象之一,Kubernetes里的每一个service其实就是我们经常提起的微服务架构中的一个微服务,之前讲解 ...