温馨提示×

ubuntu jenkins为何内存溢出

小樊
35
2026-09-16 11:36:03
栏目: 智能运维

Ubuntu 上运行 Jenkins 出现内存溢出(OOM / OutOfMemoryError),通常不是 Ubuntu 本身的问题,而是 Jenkins 进程或 JVM 配置不合理 导致的。下面按常见原因+排查方式+解决方案给你说明。


一、最常见原因

1. Jenkins JVM 堆内存设置太小(最常见)

Jenkins 是 Java 应用,默认堆内存可能只有:

  • 旧版本:256MB / 512MB
  • 新版本:根据系统自动设,但仍可能不够

表现

  • java.lang.OutOfMemoryError: Java heap space
  • Jenkins 卡死、构建失败、页面打不开

解决 修改 Jenkins 的 JVM 参数(Ubuntu 常见路径):

sudo vim /etc/default/jenkins
# 或
sudo vim /etc/systemd/system/jenkins.service.d/override.conf

示例(8G 内存机器):

JAVA_OPTS="-Xms2g -Xmx4g -XX:MaxMetaspaceSize=512m"

然后:

sudo systemctl daemon-reload
sudo systemctl restart jenkins

2. 系统总体内存不足(被系统 OOM Killer 杀掉)

Ubuntu 会直接 kill jenkins 进程,日志里可能看不到 Java OOM。

查看是否被系统杀掉

dmesg | grep -i "killed process"
journalctl -xe | grep jenkins

解决

  • 增加服务器内存
  • 关闭其他占用内存的服务(如 Docker、MySQL)
  • 限制 Jenkins 最大内存,避免吃满系统

3. Jenkins 插件或 Job 泄漏内存

某些插件(如:

  • Pipeline
  • Git
  • Docker
  • Maven
  • 第三方报告插件)

在大量构建时会导致:

  • 元空间溢出
  • 老年代不回收

表现

OutOfMemoryError: Metaspace

解决

  • 升级 Jenkins + 插件
  • 减少并发构建数
  • 定期重启 Jenkins

4. 构建任务本身占用内存过大

例如:

  • 编译 Android / Java 大项目
  • 跑大量测试用例
  • 使用 Docker in Jenkins

解决

  • 在 Agent / 节点上跑构建,而不是 master
  • 限制构建并发数
  • 给构建单独分配机器

5. Ubuntu + systemd 内存限制

如果 Jenkins 是用 systemd 启动的,可能有限制:

systemctl show jenkins | grep Memory

解决 在 service 文件中增加:

[Service]
MemoryLimit=6G

二、快速排查步骤(推荐顺序)

  1. 看 Jenkins 日志
/var/log/jenkins/jenkins.log
  1. 看系统日志
dmesg
journalctl -u jenkins
  1. 看内存使用
free -h
top
htop
  1. 看 JVM 参数
ps -ef | grep jenkins

三、推荐的基础配置(通用)

4G 内存服务器

-Xms1g -Xmx2g

8G 内存服务器

-Xms2g -Xmx4g

16G 内存服务器

-Xms4g -Xmx8g

四、总结一句话

Ubuntu 上 Jenkins 内存溢出,90% 是 JVM 堆内存不够或系统内存被吃满,不是系统问题。

如果你愿意,可以贴:

  • jenkins.log 报错
  • free -h 输出
  • Jenkins 版本

我可以帮你精准定位。

0