在 CentOS 上优化 Jenkins,一般从 系统层、JVM、Jenkins 自身、插件与构建方式 几个方面入手。下面给你一套比较实用、可落地的优化方案(适用于 Jenkins 2.x,CentOS 7/8/Stream)。
Jenkins 是 IO 密集型进程,容易遇到 Too many open files
# 查看当前限制
ulimit -n
# 永久修改
vi /etc/security/limits.conf
添加:
* soft nofile 65535
* hard nofile 65535
并确认:
vi /etc/systemd/system.conf
DefaultLimitNOFILE=65535
重启后生效。
避免 Jenkins 频繁换页:
free -h
如果 swap 使用较多:
swapoff -a
永久关闭:
vi /etc/fstab
# 注释 swap 行
vi /etc/sysctl.conf
添加:
vm.swappiness = 10
net.core.somaxconn = 2048
生效:
sysctl -p
编辑 Jenkins 启动参数:
vi /etc/sysconfig/jenkins
重点参数:
JENKINS_JAVA_OPTIONS="-Xms2g -Xmx4g -XX:+UseG1GC -XX:MaxGCPauseMillis=200"
建议:
| 内存 | 推荐 |
|---|---|
| 小项目 | 2G / 4G |
| 中大型 | 4G / 8G |
| 超大型 | 8G+ |
✅ 推荐使用 G1 GC(JDK8+)
systemctl edit jenkins
添加:
[Service]
Environment="JAVA_OPTS=-Xms2g -Xmx4g -XX:+UseG1GC"
不要无限制并发
路径:
Jenkins → 系统管理 → 系统配置
❌ 不推荐:
✅ 推荐:
方式:
Jenkins → 系统管理 → 系统信息
关闭:
路径:
系统管理 → 插件管理 → 已安装
删除:
插件过多会导致:
✅ Pipeline 优势:
示例:
pipeline {
agent any
options {
timeout(time: 30, unit: 'MINUTES')
}
stages {
stage('Build') {
steps {
sh 'make'
}
}
}
}
每个 Job 配置:
丢弃旧的构建
Jenkins 对磁盘 IO 非常敏感。
方式一:Job 内
post {
always {
cleanWs()
}
}
方式二:全局
find /var/lib/jenkins/workspace -type d -mtime +7 | xargs rm -rf
vi /etc/logrotate.d/jenkins
示例:
/var/log/jenkins/jenkins.log {
size 100M
rotate 5
compress
missingok
}
工具:
jstat -gcutil <pid> 1000
频繁 Full GC 说明内存不足。
| 项目 | 推荐 |
|---|---|
| OS | CentOS 7/8 |
| 内存 | ≥ 8GB |
| JVM | G1 GC |
| Master | 不跑构建 |
| Agent | Docker / K8s |
| 并发 | ≤ CPU × 2 |
| 磁盘 | SSD |
你可以直接贴: