温馨提示×

jenkins在centos占内存高为何

小樊
49
2026-10-03 08:40:37
栏目: 智能运维

Jenkins 在 CentOS 上内存占用高,通常不是单一原因,而是下面几类问题叠加。下面按最常见 → 较少见给你说明,并给出排查/优化建议。


一、最常见原因

1. Jenkins 本身基于 Java,默认堆内存较大

Jenkins 是 Java 应用,默认 JVM 参数往往不限制或限制很宽松。

典型表现:

  • 进程 java -jar jenkins.war
  • 常驻内存 1~4 GB 甚至更高

查看方式:

ps -aux | grep jenkins
jstat -gc <pid>

✅ 解决: 限制 JVM 内存(最重要)

JENKINS_JAVA_OPTIONS="-Xms512m -Xmx2g"

CentOS 一般在:

/etc/sysconfig/jenkins

或 systemd:

/usr/lib/systemd/system/jenkins.service

2. 插件过多 / 插件内存泄漏

Jenkins 插件质量参差不齐,常见问题:

  • 老旧插件
  • 长时间运行不重启
  • 插件线程未释放

尤其这些插件容易吃内存:

  • Pipeline
  • Git / GitHub
  • Docker
  • Kubernetes

✅ 解决:

  • 禁用不用的插件
  • 升级 Jenkins + 插件
  • 定期重启 Jenkins

3. 构建任务太多 / 并发过高

  • 同时跑很多 Job
  • 每个 Job 启动 JVM / Maven / Node
  • Agent 和 Master 不分

✅ 解决:

  • 限制并发数
  • 使用 Agent(不要全在 Master 构建)
  • 构建完及时清理工作区

4. 工作区(workspace)无限增长

构建历史 + 工作区文件堆积:

  • /var/lib/jenkins/workspace
  • 构建日志

✅ 解决:

du -sh /var/lib/jenkins/*

开启:

  • 构建历史保留策略
  • 工作区清理插件(WS Cleanup)

二、系统层面原因

5. CentOS 的 Java + glibc 内存碎片

长时间运行后:

  • RSS 很高
  • 实际 Java 堆没满

✅ 解决:

  • 定期重启 Jenkins
  • 使用较新 JDK(JDK 11+)

6. swap 没开,OOM 风险高

CentOS 默认可能没 swap,内存一满就卡死。

✅ 检查:

free -m
swapon -s

三、快速排查清单(建议按顺序)

# 1. 看 Jenkins 占用
top -p $(pgrep -f jenkins)

# 2. 看 JVM 内存
jstat -gcutil <pid> 1000

# 3. 看磁盘
df -h
du -sh /var/lib/jenkins/*

# 4. 看并发任务
Jenkins → 构建队列

四、推荐“安全配置”(通用)

-Xms1g
-Xmx2g
-XX:+UseG1GC

并:

  • 每 1~2 周重启一次
  • Master 不跑重构建
  • 控制插件数量

如果你愿意,可以把下面信息发我,我可以直接帮你判断:

  • free -m 输出
  • ps aux | grep jenkins
  • Jenkins 版本
  • 插件数量 / 并发 Job 数

我可以进一步给你针对性优化方案。

0 踩