欢迎访问我的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,如下图:

  • 接下来从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的日志页面:
  • 下图就是Pod日志页面,红框内显示任务出现了异常,(此时正在执行单元测试用例)

  • 如下图红框所示,执行任务的Pod显示为离线状态:

  • 此时登录到kubernetes环境,查看Pod状态,如下图红框所示,执行任务的Pod状态为OOMKilled,看来是内存不足导致Podl被销毁了

第一次调节

由于Pod内存过小导致任务失败,可以在Jenkins的设置页面调节Pod内存,如下图所示,这次设置到6G,注意不要超出宿主机的硬件配置:

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

观察

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

  • 在任务执行的过程中,找到Pod对应的docker容器,ID是c6d9e1b64581
  • 执行docker exec c6d9e1b64581 jps得到maven进程ID为96(名称为Launcher的那个)
  • 执行docker exec c6d9e1b64581 jmap -heap 96可以看到maven进程的JVM内存情况,如下图,可见maven实际使用内存只有3G左右:

  • 此时Pod有6G内存,可以通过参数设置给maven进程更多内存;

第二次调节

接下来尝试设置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次数不多:



    通过Jenkins设置页面,对任务的Pod以及对应的maven进程的自定义设置已经完成,希望本文能给您一些参考,帮助您根据项目的特点做针对性的调节和优化。

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

微信搜索「程序员欣宸」,我是欣宸,期待与您一同畅游Java世界...

https://github.com/zq2599/blog_demos

K8S环境的Jenkin性能问题处理续篇(任务Pod设置)的更多相关文章

  1. K8S环境的Jenkin性能问题描述

    Return Homezq2599 CnBlogsHomeContactAdminPosts - 75 Articles - 0 Comments - 16 K8S环境的Jenkin性能问题处理 环境 ...

  2. K8S环境的Jenkin性能问题处理

    环境信息 在K8S环境通过helm部署了Jenkins(namespace为helm-jenkins),用于日常Java项目构建: kubernetes:1.15 jenkins:2.190.2 he ...

  3. 记录一次k8s环境尝试过程(初始方案,现在已经做过很多完善,例如普罗米修斯)

    记录一次Team k8s环境搭建过程(初始方案,现在已经做过很多完善,例如普罗米修斯) span::selection, .CodeMirror-line > span > span::s ...

  4. [原] KVM 环境下MySQL性能对比

    KVM 环境下MySQL性能对比 标签(空格分隔): Cloud2.0 [TOC] 测试目的 对比MySQL在物理机和KVM环境下性能情况 压测标准 压测遵循单一变量原则,所有的对比都是只改变一个变量 ...

  5. Jenkins指定tag发布到k8s环境

    Jenkins指定tag发布到k8s环境 1.Jenkins配置一个Pipeline 工程 首先要安装插件:https://www.cnblogs.com/Dev0ps/p/9125232.html ...

  6. spring-cloud-kubernetes服务发现之在k8s环境下开发spring cloud应用

    通常情况下,我们的线上的服务在迁移到k8s环境下的时候,都是采用平滑迁移的方案.服务治理与注册中心等都是采用原先的组件.比如spring cloud应用,在k8s环境下还是用原来的一套注册中心(如eu ...

  7. CentOS7.6部署k8s环境

    CentOS7.6部署k8s环境 测试环境: 节点名称 节点IP 节点功能 K8s-master 10.10.1.10/24 Master.etcd.registry K8s-node-1 10.10 ...

  8. 清理rancher、k8s环境

    清理rancher.k8s环境 待办 https://blog.csdn.net/CSDN_duomaomao/article/details/77684571

  9. k8s环境部署本地.net core web项目

    上一篇文章,我们部署了docker+k8s环境,简单测试通过,但是,还没能将我们自己的项目部署上去,继续记录部署踩坑过程. 一.准备工作 1.当然是docker+k8s环境了,详情请看上一篇文档 ht ...

随机推荐

  1. myblogplus 第三期 如何更改你博客的图标,已实现 - mooling原创

    三言两语 博客的logo可以凸显你的blog的个性 不知道你有没有觉得博客园原始的那个小矿工不好看了呢 fromto 这才是个人博客的style! 为什么要写这篇文章 因为在博客园的“找找看”中,如果 ...

  2. T4m

    Unity T4M 中文讲解 http://blog.csdn.net/tianmao111/article/details/46482963

  3. adb 打开手机端口进行无线模式调试

    打开手机端口 让手机在指定的端口可以接收到TCP/IP连接. 确保手机开启了usb调试 用usb线把手机和电脑连接起来 执行命令:adb tcpip 5555 执行成功后就可以把usb线拔掉了,端口可 ...

  4. jkd1.8 stream

    目录 Stream 创建流 通过集合创建,例如Map (常用) 通过数组方式创建 通过Stream静态方法创建 中间操作 筛选和切片 filter limit skip distinct 映射 map ...

  5. Linux 基础指令2

    管道符| 先执行第一个命令后执行第二个 eg:查看文件中间几行: head -n1 文件名| tail -n2 :先查看文件前n1行,然后在n1行中的后n2行 tail -n1 文件名| head - ...

  6. web前端常见安全问题

    1,SQL注入 2,XSS 3,CSRF 4.文件上传漏洞 1,SQL注入:这个比较常见,可能大家也听说过,就是URL里面如果有对数据库进行操作的参数时,要做一下特殊的处理,否则被别有用心的人利用的话 ...

  7. File类与IO流

    一.File类与IO流 数组.集合等内容都是把数据放在内存里面,一旦关机或者断电,数据就会立刻从内存里面消失.而IO主要讲文件的传输(输入和输出),把内存里面的数据持久化到硬盘上,如.txt .avi ...

  8. vue问题整理

    生命周期面试题 1.什么是 vue 生命周期 vue 实例从创建到销毁的过程就是生命周期. 也就是从开始创建.初始化数据.编译模板.挂在 dom -> 渲染.更新 -> 渲染.卸载等一系列 ...

  9. 动态路由 - OSPF 一文详解

    动态路由 在之前的文章中,介绍了基于距离矢量的路由协议.而在今天这这一部分中会主要讲解链路状态的路由协议,对于动态的路由协议来说,需要具备如下的能力: 发现远端网络 路由器可以直接获得直连路由,这是由 ...

  10. 20191002思维导图工具MindManager 000 033