CentOS 上 Jenkins 性能调优实操指南
一 硬件与系统层优化
- 优先使用 SSD/NVMe,并尽量将 JENKINS_HOME、构建工作区、归档构件 分别放在不同磁盘或分区,降低 I/O 争用。
- 适度提升 内存与 CPU:内存不足会导致频繁 GC 或 OOM,CPU 密集任务应增加核心或采用多节点分担。
- 使用 Nginx/HAProxy 做反向代理与静态资源缓存(动静分离),可显著降低 Jenkins 前端页面加载时间。
- 保持系统健康:合理的 ulimit -n(文件句柄)、及时清理无用文件、监控磁盘空间与 IOPS。
二 JVM 与容器内存设置
- 将 -Xms 与 -Xmx 设为相同值,避免运行期反复扩容堆;建议预留 20%–30% 内存给操作系统与其他进程。
- 示例(系统服务方式):编辑 /etc/default/jenkins 或 /etc/sysconfig/jenkins,设置
JAVA_OPTS=“-Xms4g -Xmx4g -Djava.awt.headless=true”
修改后执行:systemctl restart jenkins;在 Manage Jenkins → System Information 检查 Max Heap Size 是否生效。
- 示例(war 直接运行):
nohup java -Xms4g -Xmx4g -Djava.awt.headless=true -jar /opt/jenkins.war --httpPort=8080 >/var/log/jenkins.out 2>&1 &
- 示例(Docker):
docker run -d -p 8080:8080 -p 50000:50000 --memory=8g jenkins/jenkins:lts
同时在容器内设置 JAVA_OPTS(如在 Dockerfile 或启动脚本中)以匹配容器内存上限。
- 注意:堆设置过大可能引发长时间 GC 停顿,过小会频繁 OOM,需结合构建并发与内存占用实测微调。
三 并发与构建策略
- 控制 执行器(Executors)数量:单机执行器总数不宜超过 CPU 物理核心数;I/O 密集可适当下调,避免磁盘抖动与上下文切换过多。
- 禁止在 Master 上运行业务构建,仅保留轻量管理任务;通过 标签(Label) 将重任务调度到 Agent。
- 用 SCM 推送(Webhook)替代轮询,减少无谓调度与资源浪费。
- 采用 分布式构建:增加 Agent/Slave 节点分散负载,Master 专注调度与 UI。
- 合理使用 并行阶段(parallel) 拆分测试/构建步骤,显著缩短总耗时。
- 设置 构建超时 与 队列超时,及时释放卡死或异常任务占用的资源。
四 存储与仓库加速
- 定期 清理旧构建与工作空间:在 Manage Jenkins → Script Console 执行
hudson.model.WorkspaceCleanupThread.disabled = true
并在每个 Job 配置 “Discard old builds(保持构建天数/最大个数)”,避免磁盘被历史数据撑爆。
- 优化依赖下载速度:将 Maven、npm、yarn 等仓库改为国内镜像源,减少网络等待。
- 若前端构建依赖缓存,评估是否关闭定时清理工作空间(谨慎评估磁盘占用与一致性)。
五 插件、监控与维护
- 精简插件:卸载未使用/低质量插件,减少 UI 与后台 Hook 开销;保持插件 及时更新 以获取性能修复。
- 前端性能优化:谨慎使用会引入 延迟加载/多次权限校验 的视图插件(如某些 Dashboard/嵌套视图),必要时用 Folders 插件 或外部面板替代。
- 监控与容量规划:使用 Jenkins Performance Plugin 等工具分析构建耗时、队列与节点负载;当 Job 数量 > 1000 或 UI 明显变慢时,考虑拆分 Master 或扩展集群。
- 建议建立 备份与恢复 机制(配置、任务与凭据),并定期演练。