K8S环境的Jenkin性能问题处理续篇(任务Pod设置)

Stella981
• 阅读 749

欢迎访问我的GitHub

这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos

K8S环境的Jenkin性能问题处理

本文是《K8S环境的Jenkin性能问题处理》的续篇,上一篇解决了Jenkins集群中的Master节点的性能问题,但是真正执行任务的并非Master节点,而是为每个任务临时创建的Pod,当这些Pod的性能问题决定着任务的快慢甚至成败;

环境信息

  1. 硬件:三台CentOS 7.7服务器
  2. kubernetes:1.15
  3. JDK:1.8
  4. maven:3.6.3

任务节点的性能问题

Java程序员常用Jenkins编译构建Maven项目,如果构建参数用的是默认配置,很容易出现性能问题,接下来就用开源项目来重现此问题:

  • 在配置Jenkins的kubernetes插件时,按照实际硬件情况给任务pod分配的内存是1G,如下图: K8S环境的Jenkin性能问题处理续篇(任务Pod设置)

  • 接下来从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的日志页面:K8S环境的Jenkin性能问题处理续篇(任务Pod设置)

  • 下图就是Pod日志页面,红框内显示任务出现了异常,(此时正在执行单元测试用例) K8S环境的Jenkin性能问题处理续篇(任务Pod设置)

  • 如下图红框所示,执行任务的Pod显示为离线状态: K8S环境的Jenkin性能问题处理续篇(任务Pod设置)

  • 此时登录到kubernetes环境,查看Pod状态,如下图红框所示,执行任务的Pod状态为OOMKilled,看来是内存不足导致Podl被销毁了 K8S环境的Jenkin性能问题处理续篇(任务Pod设置)

第一次调节

由于Pod内存过小导致任务失败,可以在Jenkins的设置页面调节Pod内存,如下图所示,这次设置到6G,注意不要超出宿主机的硬件配置: K8S环境的Jenkin性能问题处理续篇(任务Pod设置)

  • 重复执行一次上述任务,这一次内存充足因而构建成功。

观察

由于本次任务主要是执行maven编译构建,因此有必要了解一下maven进程的内存使用情况:

  • 在任务执行的过程中,找到Pod对应的docker容器,ID是c6d9e1b64581
  • 执行docker exec c6d9e1b64581 jps得到maven进程ID为96(名称为Launcher的那个)
  • 执行docker exec c6d9e1b64581 jmap -heap 96可以看到maven进程的JVM内存情况,如下图,可见maven实际使用内存只有3G左右: K8S环境的Jenkin性能问题处理续篇(任务Pod设置)
  • 此时Pod有6G内存,可以通过参数设置给maven进程更多内存;

第二次调节

接下来尝试设置maven进程的内存参数,这里将大部分内存划分给老年代试试:

  • 如下图,进入设置页面: K8S环境的Jenkin性能问题处理续篇(任务Pod设置)
  • 如下图,找到Pod Templates,新增环境变量,键是MAVEN_OPTS,值是-Xms5632m -Xmx5632m -Xmn512m -Xss256k,由于Pod总内存是6G,经过此设置后,整个Pod的系统内存只剩512m,其余5632m内存全部划分给maven进程,并且maven进程的年轻代只有512m,将所有内存都留给了老年代内存设置如下: K8S环境的Jenkin性能问题处理续篇(任务Pod设置)
  • 保存设置后再次执行任务,先找到任务Pod对应的docker容器,再用jmap -heap命令查看maven进程的内存情况,如下图,5632m内存全部划分给了maven进程,并且年轻代也控制在512m: K8S环境的Jenkin性能问题处理续篇(任务Pod设置)
  • 下图是执行jstat命令查看maven进程的GC情况,红框中是YGC次数,蓝框中是FGC次数,由于年轻代内存过小导致频繁YGC,不过FGC次数不多: K8S环境的Jenkin性能问题处理续篇(任务Pod设置) 通过Jenkins设置页面,对任务的Pod以及对应的maven进程的自定义设置已经完成,希望本文能给您一些参考,帮助您根据项目的特点做针对性的调节和优化。

欢迎关注公众号:程序员欣宸

微信搜索「程序员欣宸」,我是欣宸,期待与您一同畅游Java世界... https://github.com/zq2599/blog_demos

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
Kurento实战之一:KMS部署和体验
欢迎访问我的GitHub这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog\_demos(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fgithub.com%2Fzq2599%2Fblog_demos)
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
2年前
K8S环境的Jenkin性能问题处理续篇(工作节点性能)
欢迎访问我的GitHub这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog\_demosK8S环境的Jenkin性能问题处理本文是《K8S环境的Jenkin性能问题处理(https://www.oschina.net/action/GoToLink?urlhttp%
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这