CentOS 上 Jenkins 性能调优实战指南
一 硬件与系统层优化
- 资源基线:生产环境建议至少4 核 CPU + 8GB 内存,更优为8 核 16GB+;构建日志与制品多时优先使用SSD以降低 I/O 瓶颈。
- 并发控制:在 Jenkins 全局工具/节点配置中限制并发构建数,使其与 CPU、内存、I/O 能力匹配,避免过载。
- 存储与清理:定期清理旧构建与制品、归档必要产物,避免磁盘占满与查询变慢。
- 网络与内核:保障与代码仓/制品库/代理的高速稳定网络;在负载较高时可按需优化内核网络参数(如net.core.rmem_max、net.core.wmem_max、net.core.somaxconn),并谨慎启用TCP time_wait 回收相关选项;对特定高内存访问场景可评估Huge Pages。
- 基础稳定性:保持系统与依赖的内核/组件更新,减少稳定性风险。
二 JVM 与容器内存调优
- 堆大小设置:编辑 /etc/sysconfig/jenkins 或 /etc/default/jenkins,设置堆与年轻代,例如:
- 示例(系统服务):
JAVA_OPTS="-server -Xms2g -Xmx2g -Xmn512m -XX:MaxMetaspaceSize=512m -Djava.awt.headless=true"
- 示例(部分系统用 JAVA_ARGS):
JAVA_ARGS="-Xmx4096m"
建议将 -Xms 与 -Xmx 设为相同,减少堆伸缩抖动;年轻代 -Xmn 常取堆的1/4 左右;如运行在容器中,同时设置容器内存上限(如 Docker 的 –memory=4g),避免 OOM。
- 元空间与 GC:JDK 8 使用 -XX:MaxMetaspaceSize 限制元空间;JDK 7 及更早使用 -XX:MaxPermSize。GC 策略可按负载选择并行/CMS/G1,必要时开启 GC 日志用于诊断。
- 生效与验证:重启后在 Manage Jenkins -> System Information 查看 Max Heap Size 是否生效。
三 Jenkins 配置与插件优化
- 并发与队列:在“全局配置”合理设置执行者数量(# of executors)与安静期(Quiet Period),避免频繁触发导致资源争用。
- 构建策略:在 Pipeline 中使用并行 stages加速测试与构建;对重型任务启用增量构建/缓存(如依赖层缓存、构建工作区复用)。
- 插件治理:仅保留必要插件,定期更新与移除未使用插件,降低启动时间与内存占用。
- 代理与分布式:配置 Agent/Slave 节点,将构建分发到多机,减轻 Master 负载并提升吞吐。
- 构建环境:为 Git 等步骤设置合理超时(如大仓库克隆超时),减少卡死与重试。
四 监控与持续优化
- 运行监控:使用 Java VisualVM/JConsole 观察堆、线程、类加载、GC 情况;在 Jenkins 安装监控类插件(如 Performance Plugin)观察队列、执行者、响应时间。
- 日志与诊断:开启 GC 日志与必要的请求日志,结合监控定位瓶颈(堆不足、线程阻塞、I/O 饱和等)。
- 迭代调优:以负载与构建时长为指标,周期性评估并发、堆大小、节点规模与存储 I/O,按结果滚动调整。
五 快速检查清单与示例配置
- 快速检查清单
- 资源:CPU≥4 核、内存≥8GB、磁盘为SSD;系统与服务均保持最新稳定。
- 并发:全局与节点执行者数量与资源匹配;队列不过载。
- JVM:堆与年轻代设置合理并固定 Xms=Xmx;容器场景设置内存上限。
- 存储:定期清理历史构建与制品,监控磁盘使用率。
- 网络:与 Git/制品库/代理链路稳定;必要时优化内核网络参数。
- 插件:精简并及时更新,移除无用插件。
- 监控:启用 VisualVM/JConsole 与 Jenkins 监控插件,保留 GC 日志。
- 示例配置(系统服务,/etc/sysconfig/jenkins)
JENKINS_PORT="8080"
JAVA_OPTS="-server -Xms2g -Xmx2g -Xmn512m -XX:MaxMetaspaceSize=512m -Djava.awt.headless=true -XX:+UseG1GC -Xloggc:/var/log/jenkins/gc.log -verbose:gc"
修改后执行:systemctl restart jenkins,并在 Manage Jenkins -> System Information 校验 Max Heap Size。