Jenkins 在 CentOS 上变慢的系统性加速方案
一 硬件与系统层优化
- 资源基线:生产环境建议至少4 核 CPU + 8GB 内存,更优为8 核 16GB+,避免构建高峰时资源争用。
- 存储优先:使用SSD替代机械盘,显著降低构建日志、工作空间与制品的 I/O 瓶颈。
- 网络质量:保证与代码仓库、制品库、依赖源之间的高带宽与低时延连接,减少拉取与上传耗时。
- 基础调优:可按需调整内核网络参数(如net.core.rmem_max、net.core.wmem_max、net.core.somaxconn)以提升高并发下的稳定性;对内存访问密集场景可评估Huge Pages;不建议在容器/虚拟化环境盲目开启透明大页(THP),以免增加抖动。
二 Jenkins 配置优化
- JVM 堆与 GC:为 Jenkins 设置合理的堆大小,建议将最大堆设为4GB 起(如:-Xmx4096m),并同时设置初始堆**-Xms**与之相同以减少运行时扩缩容抖动;结合监控选择合适 GC 策略。
- 并发控制:在“全局工具配置/系统配置”中限制并发构建数,使其与 CPU、内存、I/O 能力匹配,避免过载。
- 轻量化:关闭或卸载不必要的插件/功能模块,减少启动与运行期内存占用。
- 构建留存:定期清理旧构建与制品,释放磁盘空间并缩短页面与查询响应时间。
- 监控与诊断:使用Java VisualVM、JConsole或 Jenkins 的性能插件观察堆、线程、类加载、GC 与 HTTP 请求耗时,按指标逐步调参。
三 插件与构建流程优化
- 插件治理:保持插件及时更新以获取性能修复;移除未使用插件,降低启动时间与常驻内存。
- 下载加速:将插件和更新源切换为国内镜像,显著缩短插件安装与更新耗时。
- 拉取优化:处理大仓库时,适当增加Git Clone 超时;优先使用浅克隆(–depth=1)与稀疏检出;启用Git 缓存/本地镜像与并发拉取,减少网络往返。
- 依赖缓存:为Maven/Gradle/NPM等启用本地仓库缓存(如私有 Nexus/Artifactory 或本地缓存目录),避免每次重复下载依赖。
- 流水线效率:在 Pipeline 中合理使用缓存指令与工作空间清理策略,将耗时且不常变的步骤(如依赖安装)前置并缓存结果。
四 架构与扩展
- 分布式构建:配置多个 Agent/Slave 节点,按标签将任务分发到专用节点(如高 I/O、GPU、特定 SDK 版本),显著降低 Master 负载并提升吞吐。
- 高可用与弹性:采用 Master-Slave 架构与健康检查,在节点故障时自动转移任务,保障稳定性与持续交付能力。
五 快速检查清单与可操作示例
- 快速检查清单
- 资源:CPU/内存是否吃紧;磁盘是否为SSD且inode/空间充足;是否存在 I/O 等待。
- 配置:JVM 堆是否合理(如**-Xmx4G**起步);并发构建数是否过高;是否保留过多历史构建。
- 插件:是否存在大量未使用插件或版本过旧。
- 流程:是否启用浅克隆/缓存;依赖是否命中本地/私有仓库。
- 架构:是否使用多 Agent分担构建;Master 是否承担过多构建与任务调度。
- 可操作示例
- 设置堆大小(以 systemd 管理的 jenkins 服务为例):编辑 /etc/sysconfig/jenkins,设置
- JAVA_ARGS=“-Xms4096m -Xmx4096m”
- 重启:systemctl restart jenkins
- 限制并发:在 Jenkins 管理界面将“执行者数量”设置为与 CPU 核心和内存相匹配的值(如4–8,视负载而定)。
- 插件源加速:在“插件管理 → 高级”将升级站点改为国内镜像,提升下载速度。
- Git 优化:在 Job 配置中使用“浅克隆”“稀疏检出”,并在“高级克隆行为”中适当增大超时时间与克隆重试次数。