Jenkins 在 CentOS 上变慢的优化清单
一 硬件与系统基线
- 资源基线:生产环境建议至少4 核 CPU + 8GB 内存,更优为8 核 16GB+;构建日志、工作空间与制品对磁盘 I/O 敏感,优先使用SSD/NVMe。
- 存储布局:将 JENKINS_HOME 与构建工作空间、归档制品分离到不同磁盘(或分区),降低 I/O 争用。
- 基础检查:确认磁盘空间充足(
df -h)、I/O 无持续饱和(iostat -x 1)、内存与 swap 使用合理(free -m、vmstat 1)。
以上基线能显著缓解大多数“卡、慢、超时”的根因。
二 Jenkins 配置优化
- JVM 堆与 GC:为 Jenkins 设置合适的堆大小,建议将 -Xms 与 -Xmx 设为相同值,避免运行期扩缩堆带来的抖动;例如将最大堆设为4GB:
JAVA_ARGS="-Xms4096m -Xmx4096m";同时开启Headless 模式:"-Djava.awt.headless=true"。
- 并发控制:在“全局工具配置/系统配置”中限制并发构建数与执行器数量,使其与 CPU、内存、I/O 能力匹配,避免资源争用。
- 构建保留策略:在任务配置中启用“丢弃旧的构建”,限制保留的构建个数/天数与制品保留策略,减少磁盘占用与索引压力。
- 插件治理:仅保留必要插件,定期更新并卸载无用插件,降低启动时间与常驻内存开销。
- 任务并行化:在 Pipeline 中使用
parallel 将可并行的阶段拆分,提高整体构建吞吐。
这些设置对页面响应、构建排队与执行稳定性影响最大。
三 系统与网络调优
- 文件句柄与进程数:适度提升 ulimit -n(打开文件数)与 nproc(进程数),避免大量并发构建时报“Too many open files”。
- 网络参数(谨慎、灰度):在
/etc/sysctl.conf 中可适度提高网络缓冲与连接队列,例如:
net.core.rmem_max、net.core.wmem_max(网络缓冲区)
net.core.somaxconn(全连接队列)
修改后执行 sysctl -p 生效。
- 存储与文件系统:使用 noatime 挂载选项减少元数据写入;确保文件系统为 ext4/xfs 等常规本地文件系统(避免不稳定的网络文件系统带来的抖动)。
- SELinux:若确认策略影响性能且已做好安全评估,可设置为 permissive 模式以排除干扰(不建议长期关闭)。
系统层面的小调整往往能消除“偶发性卡顿”。
四 构建与流水线实践
- 依赖缓存:对 Maven/Gradle/NPM 等依赖启用缓存(本地仓库或私有镜像),避免每次重复下载。
- 制品与缓存分层:将依赖缓存、构建中间产物、最终制品分层存放,减少重复打包与拷贝。
- 精简步骤:删除冗余的
checkout、clean 与重复构建逻辑;能复用的工作区尽量复用。
- 分布式构建:配置 Agent/Slave 节点,按标签(如
linux, docker, gpu)将任务分发到合适节点,减轻 Master 负载并提升并行度。
这些实践对缩短构建时长、降低主节点压力效果显著。
五 监控与持续优化
- Java 监控:使用 JVisualVM/JConsole 观察堆内存、线程、类加载与 GC 行为,依据监控结果微调 -Xmx/-Xms 与并发度。
- Jenkins 监控:安装 Performance Plugin 观察队列长度、执行器利用率、构建时长等指标,定位瓶颈(CPU/内存/I/O/网络)。
- 例行维护:定期清理旧构建与工作空间、审计并禁用低效或异常插件、复核并发与节点负载分配策略。
- 变更验证:任何参数调整与插件变更都应先在测试环境验证,并观察至少 24–48 小时的稳定性与指标变化。
持续监控+小步快跑的迭代,是保持长期稳定的关键。