解决 Jenkins 性能缓慢的问题~转

解决 Jenkins 性能缓慢的问题

Docker中文社区

Docker中文社区

​​

计算机技术与软件专业技术资格持证人

2 人赞同了该文章

没有什么比缓慢的持续集成系统更令人沮丧的了。它减慢了反馈循环并阻止代码快速投入生产。虽然像使用性能更好的服务器可以为您争取时间,但您最终必须投资于维持持续集成工作流程的成本。

Jenkins 是目前最流行的 CI/CD 工具之一,但随着时间的推移,用户经常会遇到滞后和响应缓慢问题。在本指南中,我将分享一些 Jenkins 性能问题的概述,以及一些无需升级硬件即可显着提高性能的技巧。

1. 为什么 Jenkins 如此受欢迎的 CI/CD 选择?

Jenkins 是一种基于 Java 的开源工具,成千上万的开发人员在数十万次安装中使用它,使其成为最受欢迎的自动化集成工具。这种广泛使用意味着很容易找到对 Jenkins 的支持和提示,但这并不是它如此广泛使用的唯一原因。

Jenkins 为 CI 工作流程带来了许多有趣的范例,包括:

  • 更快的部署。在所有开发人员提交他们的代码之后,一次测试和部署构建的日子已经一去不复返了。使用 Jenkins 的自动化 CI/CD 管道,无论何时开发人员提交代码,它都会在一天中跨多个周期进行构建和测试。
  • 可扩展的主代理架构。在大规模管理分布式构建时,Jenkins 可能是一个不错的选择。Jenkins 的主服务器是调度构建作业并将它们分配给代理(以前是从属)执行的主服务器。此模式允许您在一台或数百台服务器上运行 Jenkins 以加快构建速度。
  • 数以千计的插件:作为一个开源平台,Jenkins 为其他开发人员构建的持续集成提供了大量插件。这允许您扩展基本功能,而无需在内部编写或维护大量额外代码。

2. 克服常见的 Jenkins 性能问题

随着时间的推移,构建频率的增加、并行运行的多个作业以及构建复杂性的增加可能会导致 Jenkins 出现性能问题。您的体验可能会因您的使用场景而异,但一些常见问题包括:

  • 每次运行时构建似乎都“卡在”特定步骤的“中断”。
  • 达到单个机器或主节点的内存限制。
  • CPU 瓶颈会减慢构建的特定部分。
  • 插件或脚本中的错误或低效代码。
  • 由于这些问题可能是由多种根本原因引起的,因此很难概括解决方案,但 Jenkins 用户可能想要研究一些事情。以下是一些最通用的方法,您可以提高 Jenkins 构建性能并限制上述问题的频率。
2.1 避免在管道中使用复杂的 Groovy 脚本

Jenkins Groovy脚本控制台在主节点上执行并直接使用主资源,例如CPU和存储器。因此,建议您减少管道中 Groovy 脚本的数量和复杂性,转而可以直接使用在每个代理上运行的插件。

在 Jenkins 中要避免的最常见的 Groovy 方法是 JsonSlurper、Jenkins.getInstance 和 HttpRequest。Jenkins在其博客上有更多关于可扩展管道代码和要避免的操作的建议。

2.2 在主节点上保持最少的构建

Jenkins 的主节点位于应用程序运行的整个 CI/CD 流程的中心。因此,主节点上的构建数量会显着影响资源使用。在主节点上保持较少的构建将为代理节点留出足够的 CPU 和内存来安排和触发作业。

您可以在工作中使用“限制项目可以运行的位置”选项。虽然 Jenkins 仍将在主节点上运行轻量级执行器,但您的重量级执行器将在代理节点上运行。

将主节点视为 Jenkins 的大脑。与代理不同,主节点不能被清除或替换。因此,为确保最佳 CI/CD 功能,请考虑对 Jenkins 进行一些性能调整,并将主节点从不必要的任务中解放出来。这将为您提供足够的内存和 CPU 来有效调度和构建代理上的触发器。

2.3 不要过渡 Jenkins 主节点插件安装

DevOps 专业人员经常跨多个团队和项目工作,以完成与 CI/CD 相关的任务。如果这是您的情况,请注意不要给单个 Jenkins master 带来负担。相反,创建多个主控。多个 master 将确保为 master 分配项目特定的资源,并且您还将避免插件冲突。

此外,不要设置可能在周期中的任何地方失败的长时间构建,记住将构建分解为多个较小的作业。

2.4 轻松管理代理

在设置 Jenkins 时,正确设置代理很重要。您希望确保在时机成熟时,您可以轻松添加新代理或替换现有代理。为此,请考虑为代理创建虚拟机镜像。您也可以考虑在 Kubernetes 或Amazon EKS等可扩展集群中的Docker 容器内运行 Jenkins。

使用具有通用性的代理也是一个好主意;一个代理应该运行多个不同的作业并最大限度地利用资源。

2.5 删除构建历史

一段时间后,Jenkins 构建可能会堆积起来,磁盘消耗可能会失控。开发人员经常忽略 Jenkins 的Discard Old Builds选项。设置指标,例如构建数量和保留构建和工件的天数,位于 Jenkins Log Rotation 菜单下。

与其让旧版本累积并消耗文件系统,开发人员可以启用Discard Old Builds并在 Jenkins 作业完成后享受自动资源使用清理。您还可以使用 G1 垃圾收集器来代替 Java 8 的默认Parallel GC,因为前者是一种服务器风格的垃圾收集器,具有较低的 GC 暂停时间。

也可以通过 Jenkins 命令行手动删除构建,或者使用定期清理旧构建的cron 作业。您可以在此参考文章中找到丢弃旧构建数据的其他选项https://support.cloudbees.com/hc/en-us/articles/215549798-Deleting-Old-Builds-Best-Strategy-for-Cleanup-and-disk-space-management

2.6 防止并行作业中的资源冲突

并行运行的作业可能需要独占访问端口或资源。这可能会导致冲突、构建失败并进一步减慢 Jenkins 流水线。例如,如果您并行运行多个构建,则它们在访问资源时很有可能发生冲突,例如 Postgres 的数据库端口 5432。

Jenkins 提供Throttle Concurrent Builds插件来帮助调节 Jenkins 节点上的并发构建数量:

//Throttleasingleoperation throttle(['test_1']){ node(){ sh"sleep100" echo"Done" } }

2.7 控制堆大小

您想创建以性能为导向且永不会因内存泄漏或内存不足错误而失败的 CI/CD 管道吗?注意堆大小。随着 Jenkins 构建数量的增长,如果不注意默认堆大小可能会导致内存不足错误。

大多数现代 Java 应用程序在启动期间都使用最大堆大小配置。为了让 Jenkins 顺利运行,请将最大堆大小属性降低到最大4 GB。您可以随时间增加堆大小,具体取决于 Jenkins 构建。

要将堆大小设置为 4 GB:

  • /etc/default/jenkins
  • JAVA_ARGS="-Xmx4096m"
2.8 避免插件过载

Jenkins 拥有超过一千个可用插件,为其用户提供了许多功能来增强他们的 CI/CD 管道。但是,在向管道添加插件和外部服务时,请牢记性能。将 Jenkins 与外部服务集成通常会减慢 Jenkins UI 并导致不利影响,例如代理丢失或断开连接。

为了确定插件是否导致您的构建速度变慢,您可以尝试在禁用所有或部分插件的情况下运行构建。逐渐添加每个返回以确定导致瓶颈的原因。找到导致性能问题的插件(或插件组合)后,您有几个选择:

  • 通过搜索Jenkins Plugin Index找到替换插件。
  • 通过检查changelog来查看Jenkins 是否添加了对这个特性的原生支持。您可能必须升级 Jenkins 才能获得最新功能,但这通常是提高性能的好主意。
  • 用自定义脚本替换插件,记住这可能会引入新的性能问题。不过,如果您安装一个复杂的插件,但只使用一两个小功能,脚本可能会更有效。
  • 如果您可以没有它,请删除该插件。有时这是一个值得的权衡。

3.0 跟踪 Jenkins 性能

当您开始调整 Jenkins 性能时,您可能有兴趣添加一个插件来帮助监控和提高性能。例如,您可以利用Jenkins Monitoring 插件深入了解您的 CI/CD 管道,包括:

  • 错误日志
  • CPU、内存和平均系统负载图表
  • 关于 HTTP 会话和 HTTP 响应时间的报告
  • 构建时间和构建步骤的详细统计信息
  • 所有节点的聚合堆直方图

Jenkins 性能监控工具

这可以帮助您评估性能调整的有效性,并在您继续改进 Jenkins 安装时为您提供指导。

4.0 总结

Jenkins 的响应能力问题很常见,尤其是在处理较重的构建时。损坏的 Jenkins CI/CD 管道可能会拖延您的开发团队并创建不必要的依赖项。本文中讨论的技巧应该可以帮助您显着提高 Jenkins CI/CD 管道的性能。

本文转载自:「云原生技术爱好者社区」,原文: https://mp.weixin.qq.com/s/u34d-xTZZDs53ZLfqtilxQ,版权归原作者所有。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/96650.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UG\NX CAM二次开发 获取当前加工导航器选中的对象数量和tag UF_UI_ONT_ask_selected_nodes

文章作者:代工 来源网站:NX CAM二次开发专栏 简介: UG\NX CAM二次开发 获取当前加工导航器选中的对象数量和tag UF_UI_ONT_ask_selected_nodes 效果: 代码: void MyClass::do_it() {//获取当前加工导航器选中的对象数量和TAGint count = 0;tag_t* objects = NULL…

stm32 - 中断

stm32 - 中断 概念中断向量表NVIC 嵌套中断向量控制器优先级 中断EXTI概念基本结构例子- 对射式红外传感器计次例子 - 旋转编码器 概念 stm32 支持的中断资源(都属于外设) EXTITIMADCUSARtSPII2C stm32支持的中断 内核中断 外设中断 中断通道与优先级 一…

物联网AI MicroPython传感器学习 之 噪音测量传感器

学物联网,来万物简单IoT物联网!! 一、产品简介 麦克风噪音测量传感器,通过单片机对信号的简单处理,可实环境音检测、声控开关这样的有趣实验。传感器模块仅占用一个IO口,通过电压强度(mV&#…

IIS部署Flask

启用 CGI 安装wfastcgi pip install wfastcgi 启用 wfastcgi 首先以管理员身份运行wfastcgi-enable来在IIS上启用wfastcgi,这个命令位于c:\python_dir\scripts,也就是你需要确保此目录在系统的PATH里,或者你需要cd到这个目录后再执行。 #…

Node-RED系列教程-25node-red获取天气

安装节点:node-red-contrib-weather 节点图标如下: 使用说明:node-red-contrib-weather (node) - Node-RED 流程图中填写经度和纬度即可。 演示: json内容: {

Linux服务器报错“No space left on device”如何解决

一、错误的含义,说明在服务器设备上的存储空间已经满了,不能再上传或者新建文件夹或者文件等。 二、确认查看服务器系统的磁盘使用情况是否是真的已经没有剩余空间,复制下面命令在服务器上运行,然后发现如果如下图所示那么表明sda…

代码随想录算法训练营第23期day14|二叉树层序遍历、226.翻转二叉树、101. 对称二叉树

目录 一、二叉树层序遍历 非递归法 递归法 相关题目(10题) 二、(leetcode 226)翻转二叉树 递归法 层序遍历 深度优先遍历 1)非统一写法——前序遍历 2) 统一写法——前序遍历 三、(le…

软件测试/测试开发丨App自动化测试-弹窗异常处理

点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接:https://ceshiren.com/t/topic/27692 黑名单处理 运行过程中不定时弹框(广告弹窗,升级提示框,新消息提示框等等) 弹框不是 BUG&#xff0…

docker数据管理和网络通信

docker数据管理 管理 Docker 容器中数据主要有两种方式: 数据卷(Data Volumes)和数据卷容器(DataVolumes Containers)。 1.数据卷 数据卷是一个供容器使用的特殊目录,位于容器中。可将宿主机…

测试工程师思维学习

一、测试工程师应具备什么思维? 透过现象看本质,拒绝“一叶障目” 01、质疑和系统思维 02、创新思维 03、全局思维 04、风险驱动和组合思维 05、用户为中心和比较思维 06、BT思维和架构扩展性思维 二、测试工程师应避免的思维 01、同化现象 02、定位效…

数据结构-----二叉排序树

目录 前言 1.什么是二叉排序树 2.如何构建二叉排序树 3.二叉排序树的操作 3.1定义节点储存方式 3.2插入节点操作 3.2创建二叉排序树 3.4遍历输出(中序遍历) 3.5数据查找操作 3.6获取最大值和最小值 3.7删除节点操作 3.8销毁二叉排序树 4.完…

AdaBoost(上):数据分析 | 数据挖掘 | 十大算法之一

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ 🐴作者:秋无之地 🐴简介:CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作,主要擅长领域有:爬虫、后端、大数据…

Zookeeper经典应用场景实战(二)

文章目录 1、 Zookeeper 分布式锁实战1.1、 什么是分布式锁1.2、 基于数据库设计思路1.3、 基于Zookeeper设计思路一1.4、 基于Zookeeper设计思路二 1、 Zookeeper 分布式锁实战 1.1、 什么是分布式锁 在单体的应用开发场景中涉及并发同步的时候,大家往往采用Sync…

DRM全解析 —— CRTC详解(1)

本文参考以下博文: Linux内核4.14版本——drm框架分析(4)——crtc分析 特此致谢! 1. 简介 CRTC实际上可以拆分为CRTC。CRT的中文意思是阴极摄像管,就是当初老电视上普遍使用的显像管(老电视之所以都很厚,就是因为它…

【状态估计】将变压器和LSTM与卡尔曼滤波器结合到EM算法中进行状态估计(Python代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

人机言语交互模型的评估要素

智能客服中的言语交互模型评估要素,主要包括以下几个方面: 有效性:指模型能否准确识别和理解用户的言语意图,以及生成正确和合适的回答。可以通过比较模型生成的回答与人工回答的准确率来评估。流畅性:指模型在回答问…

【单调栈】下一个更大元素 II

文章目录 Tag题目来源题目解读解题思路方法一:单调栈循环数组 写在最后 Tag 【单调栈循环数组】【数组】 题目来源 503. 下一个更大元素 II 题目解读 在循环数组中找下一个更大的元素。循环数组指的是,数组的最后一个元素的下一个元素是数组首元素。 …

C语言之动态内存管理篇(1)

目录 为什么存在动态内存分配 动态内存函数的介绍 malloc free calloc realloc 常见的动态内存错误 今天收假了,抓紧时间写几篇博客。我又来赶进度了。今天我们来讲解动态内存管理。🆗🆗 为什么存在动态内存分配 假设我们去实现一个…

Excel插件:StatPlus Pro 7.7.0 Crack

Windows 版 StatPlus 借助 StatPlus,人们可以获得一套强大的统计工具和图形分析方法,可以通过简单直观的界面轻松访问。StatPlus 的可能应用范围几乎是无限的 - 社会学、金融分析、生物统计学、经济学、保险业、医疗保健和临床研究 - 仅举几个该程序已被…

SignalIR入门

SignalIR入门 简介教程1.创建项目2.添加 SignalR 客户端库3.创建 SignalR 中心4.配置 SignalR5.添加 SignalR 客户端代码 效果 简介 SignalR 是一个用于构建实时 Web 应用程序的开发工具和库,它可以让服务器端代码与客户端代码之间建立双向通信。SignalR 的中文解释…