首页 > 其他分享 >K8S环境的Jenkin性能问题处理续篇(任务Pod设置)f

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

时间:2022-11-25 10:33:45浏览次数:58  
标签:执行 Jenkin 如下 maven 任务 内存 Pod K8S

欢迎访问我的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.0_141
  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被销毁了: 在这里插入图片描述

第一次调节(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进程更多内存;

第二次调节(JVM参数)

  • 接下来尝试设置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次数不多: 在这里插入图片描述
  • 在构建过程中还发生过 StackOverflow 异常,如下图所示,解决办法依旧是调节参数 MAVEN_OPTS ,值是 -Xms5632m -Xmx5632m -Xmn512m -Xss512k ,也就是将线程栈内存放大一倍: 在这里插入图片描述
  • 上述设置并非最优,而是验证MAVEN内存参数的调节可以生效;
  • 通过Jenkins设置页面对任务的Pod以及对应的maven进程的自定义设置已完成,希望本文能给您一些参考,帮助您根据项目的特点做针对性的调节和优化;

欢迎关注51CTO博客:程序员欣宸

学习路上,你不孤单,欣宸原创一路相伴...

标签:执行,Jenkin,如下,maven,任务,内存,Pod,K8S
From: https://blog.51cto.com/zq2599/5882501

相关文章

  • Harbor用户机制、镜像同步和与K8s的集成实践
    Habor是由VMWare公司开源的容器镜像仓库。事实上,Habor是在DockerRegistry上进行了相应的企业级扩展,从而获得了更加广泛的应用,这些新的企业级特性包括:管理用户界面,基于角色......
  • K8S 集群架构
    K8S集群架构 master主节点,控制平台,不需要很高性能,不跑任务,通常一个就行了,也可以开多个主节点来提高集群可用度worker工作节点,可以是虚拟机或物理计算机,任务都在这......
  • JavaWeb+SVN+Maven+Tomcat +jenkins实现自动化部署
       在日常开发项目中常见的开发模式是使用代码库来存放我们的项目例如:SVN、Git、CVS等,采用Maven来进行项目管理而需要在测试和发布项目的时候需要手动打包然后部署到服......
  • 每天一点基础K8S--kubeadm构建多master k8s集群--version 1.20.6
    搭建条件centos-stream-8[root@localhost~]#cat/etc/os-releaseNAME="CentOSStream"|主机名|IP地址|role||master-worker-node-1|192.168.122.6/24|......
  • 部署 jenkins master 及多 slave 环境(第四周)
    jenkins分布式环境介绍jenkins分布式作用 在众多Job的场景下,单台jenkinsmaster同时执行代码clone、编译、打包及构建,其性能可能会出现瓶颈从而会影响代码部署效......
  • Jenkins 问题汇总
    1.未安装MavenERROR:AMaveninstallationneedstobeavailableforthisprojecttobebuilt.EitheryourserverhasnoMaveninstallationsdefined,orthere......
  • springboot 与 k8s结合使用
    https://juejin.cn/post/7138975184114941965https://techdozo.dev/deploying-a-restful-spring-boot-microservice-on-kubernetes/https://piotrminkowski.com/2017/05/......
  • Kubernetes(K8S) 常用命令
    Docker常用命令Docker常用命令#查看API版本[root@k8smaster~]#kubectlapi-versions#重启K8S[root@k8smaster~]#systemctlrestartkubelet#查看kubelet......
  • 基于docker搭建Jenkins+git+python+allure
    一、创建jenkins容器1、拉取jenkins镜像dockerpulljenkins/jenkins:latest    2、创建本地目录,后续挂载jenkins的工作目录mkdir/home/jenkins_home3、......
  • ubuntu 20.04使用kubeadm安装k8s集群
    本文主要用于记录,步骤参考了:https://blog.csdn.net/weixin_44559544/article/details/123381441一、设备相关准备1、修改节点主机名,这样好区分我总共是三台......