达到必杀技
Jenkins 性能:如何避免陷阱、诊断问题和扩展
欧文·梅赫根CloudBees 高级开发人员支持工程师
瑞安·史密斯CloudBees 高级开发人员支持工程师
我们使用开源自动化服务器 Jenkins 已有 10 多年,我们已经看到它如何帮助团队快速高效地构建和交付数以千计的应用程序。
但是,尽管 Jenkins 如此出色,但没有任何工具是绝对可靠的。实施有时会遇到性能问题,导致构建速度变慢、项目搁置,并迫使团队在故障排除模式下争先恐后。
幸运的是,您可以采取一些步骤来消除(如果不能完全消除)项目每个阶段的性能问题。如果您尽早更改配置,在问题出现之前,您的 Jenkins 工作负载将在更长的时间内表现得更好。
您可以根据特定标准监控工作负载性能,以便您收到可能超出资源分配增长的警报。即使您不是 Java 专家,也可以使用直观的工具来诊断问题。最终,如果您超出了一位 master,则可以通过简单的方法将您的工作量分配给两个或更多新 master。
我们将在即将在 DevOps World / Jenkins World 上的演讲中深入探讨这一点。与此同时,这里有一些关于如何避免 Jenkins 陷阱、诊断实施中的问题以及为未来增长进行扩展的想法。
仔细看看Jenkins
Jenkins 有时会遇到问题的原因有很多。一方面,它没有为内存使用或垃圾收集配置任何显式设置。从历史上看,人们的想法是开发人员或管理员希望针对他们的环境或工作负载对其进行调整,但实际上这通常不会发生。
此外,Jenkins 可以处理的负载取决于您运行的构建作业数量以外的因素。如果您将大量构建历史记录存储在工具中,如果您每天进行大量构建,或者如果您与许多外部服务集成,它可能会被拖累。
您可能还面临插件过载的问题。值得称赞的是,Jenkins 拥有令人难以置信的 1,700 个可用插件。该库为 Jenkins 提供了很大的功能和灵活性,但它的社区驱动性质意味着质量各不相同。此外,在考虑向安装中添加插件时,您应该牢记性能。
进行适当的配置
为了缓解这些问题,您可以在配置阶段采取几个步骤。一种是确保您正在轮换构建历史或丢弃旧构建。这有助于减少 Jenkins 的内存占用,从而提高性能。我们建议保留 30 到 60 天的构建历史记录,但您应该在每个作业的基础上进行配置。
要遵循的其他步骤?**使用 SSD 存储**。它快速、可靠,而且比以前便宜得多。快速存储对 Jenkins 有很大影响。
使用 G1 垃圾收集器来管理其内存使用,而不是 Java 8 的默认 ParallelGC。并将“堆”的大小(Jenkins 可用的最大内存量)开始设置为 4GB ,给自己留出随着时间增长的空间。
您可以在此处找到我们所有特定的Jenkins 初始调优最佳实践。
诊断问题
诊断性能问题是一个多步骤的过程。最初,您应该查看诸如内核“dmesg”日志之类的内容,这些日志会告诉您磁盘是否有错误或内存是否出现故障。
此外,检查 CPU 使用率是否很高(但请记住,这可能是一个错误的指标)。Jenkins 通常不需要很多处理能力来工作,但内存和存储性能问题也会使您的 CPU 负载激增。
如果您没有看到明显的问题,例如硬件问题,请查看 Java 从系统中为 Jenkins 分配了多少内存,以及它实际使用了多少内存。查看垃圾收集日志以查看是否存在内存泄漏。
有一些工具可以对这些日志进行性能分析,以确定潜在的泄漏位置。如果没有泄漏,则为 Jenkins master 分配更多内存。
您还可以分析显示 Jenkins 在给定时间所做的一切的线程转储。一些线程处理特定的工作;其他人执行内务任务或运行用户界面。阻塞的线程可能表示当前或未来的性能问题。
何时以及如何扩展
此时,如果您找到了罪魁祸首,通常是硬件或配置问题,恭喜!现在您可以修复它并继续前进。但是,如果您仍然面临性能问题,则可能是因为您的初始设置已经超出了范围。
什么时候重新设计你的 Jenkins 架构?那要看。Jenkins 受到许多因素的驱动,超出了您运行的实际构建数量,因此我们的经验法则是为 Jenkins 分配不超过 16GB 的内存。在那之后,Java 的垃圾收集性能不佳,性能也会受到影响。如果您的工作负载开始需要那么多内存,则是时候拆分配置并将作业分配给第二个 Jenkins 主机了。您始终可以按团队划分工作负载,每个团队都有自己的master。
至于如何实际扩展您的工作负载,您采取的操作取决于您使用的 Jenkins 版本。如果您使用的是开源 Jenkins,则必须手动扩展它。
在这种情况下,当您启动新的母版并复制作业时,请确保它们正确运行。Jenkins 的新配置即代码功能可以轻松创建具有相同版本的所有内容的可重复、相同的环境。
您还可以找到商业工具(例如我们的),可以更轻松地管理您的 Jenkins Master。当您将作业转移到新主服务器时,这些可以完成繁重的工作,确定需要哪些插件并进行实际安装。您还可以获得 Jenkins 的免费、经过验证的发行版,以及对其的商业支持。这为小型团队或个人提供了与企业用户相同的支持。
部署前请三思
Jenkins 是一个很棒的工具——如果配置正确。因此,在继续之前考虑如何部署它,如何诊断任何问题,以及随着需求的增长将采取哪些步骤来扩展它。
通过适当的管理,Jenkins 运行良好;它为您提供了交付最佳软件所需的资源。
想知道更多?来参加我们在 DevOps World 上的演讲 | Jenkins World 将于 8 月 12 日至 15 日在旧金山举行。TechBeacon读者使用代码 DWJW20 注册时可享受 20% 的折扣 。
保持学习
- 为您的下一次 DevOps 职业变动做好准备: TechBeacon 的职业主题中心提供专家建议,为您的下一次职业变动做好准备。
- 找出为什么这10 家公司在 DevOps 中扼杀了它。
- 获取免费的 EMA 报告 优化 DevOps 计划:DevOps 分歧的双方。
- 想实现高性能持续交付? 这里有 3 种有效的技术实践。
- 在TechBeacon 的 CDRA 指南中了解持续交付和发布自动化如何要求速度和质量 。
- 开始使用测试自动化? 以下是每个软件开发人员都应该知道的测试自动化基础知识。
- 了解如何利用 敏捷和 DevOps 来减少生产缺陷的数量、成本和影响。
阅读更多关于:DevOps、 DevOps 趋势的文章