调整 Jenkins 内存的核心在于修改 Java 虚拟机(JVM)的启动参数,主要是 -Xms(初始堆内存)和 -Xmx(最大堆内存)。修改方式取决于你的 Jenkins 运行方式(系统包、Docker 还是 WAR 包)。
以下是针对不同场景的详细调整方法:
在修改之前,先了解关键参数:
-Xms:初始堆内存(Heap Size)。建议与 -Xmx 设置为相同值,避免 JVM 频繁申请内存导致停顿。-Xmx:最大堆内存。这是 Jenkins 能使用的最大内存限制。4g 或 6g。这是最常见的场景。Jenkins 通常作为系统服务运行。
步骤:
编辑配置文件: 打开 Jenkins 的配置文件。
/etc/default/jenkins/etc/sysconfig/jenkins修改 JAVA_OPTS 或 JENKINS_JAVA_OPTIONS:
找到 JAVA_OPTS 这一行。如果不存在,可以添加。
# 示例:将内存设置为最小 2GB,最大 4GB
JAVA_OPTS="-Xms2g -Xmx4g -XX:MaxPermSize=512m"
# 注意:Java 8 之后不再需要 MaxPermSize,如果是 Java 8+ 请忽略或删除该参数
如果是较新版本的 Jenkins,可能需要修改 JENKINS_JAVA_OPTS 或者直接修改 ExecStart 命令(见 Systemd 方式)。
如果是 Systemd 管理(较新系统): 有时直接修改上述文件不生效,需要修改 systemd 的 override 文件。
sudo systemctl edit jenkins
在打开的编辑器中添加:
[Service]
Environment="JAVA_OPTS=-Xms2g -Xmx4g"
如果原配置文件中已有 Environment,这里会覆盖或合并。
重启 Jenkins:
sudo systemctl restart jenkins
# 或者
sudo service jenkins restart
Docker 环境下,内存调整通常在 docker run 命令或 docker-compose.yml 中设置环境变量。
方法 A:docker run 命令
docker run -d \
--name jenkins \
-p 8080:8080 \
-p 50000:50000 \
-e JAVA_OPTS="-Xms2g -Xmx4g" \ # 关键在这里
-v jenkins_home:/var/jenkins_home \
jenkins/jenkins:lts
方法 B:docker-compose.yml
version: '3'
services:
jenkins:
image: jenkins/jenkins:lts
ports:
- "8080:8080"
environment:
- JAVA_OPTS=-Xms2g -Xmx4g # 传递给 JVM 的参数
volumes:
- jenkins_home:/var/jenkins_home
volumes:
jenkins_home:
如果你是通过 java -jar jenkins.war 启动的,直接在命令行添加参数即可。
java -Xms2g -Xmx4g -jar jenkins.war
或者设置环境变量后启动:
export JAVA_OPTS="-Xms2g -Xmx4g"
java $JAVA_OPTS -jar jenkins.war
修改并重启后,需要确认配置是否成功加载。
sun.java.command 或 java.opts,或者直接查看 Memory 部分,确认 Max Memory 是否是你在 -Xmx 中设置的值。-Xmx 设置太小,需要增加。-XX:MaxMetaspaceSize=512m-Xmx,还要确保容器本身的内存限制 (Memory Limit) 大于 -Xmx 的值(建议至少多出 1GB 给堆外内存使用),否则容器会被系统 Kill 掉。-Xmx 并不是越大越好。过大的堆会导致 Full GC 停顿时间过长(Stop The World),反而让 Jenkins 响应变慢。总结公式(Docker 场景):
容器内存限制 > -Xmx + 堆外内存(约1~2G)