当Jenkins在Ubuntu上作为守护进程运行时,如何为Jenkins提供更多堆空间?

时间:2013-02-07 22:21:53

标签: java ubuntu jenkins out-of-memory heap

我的Jenkins作业内存不足,在构建日志中发出java.lang.OutOfMemoryError条消息。但我使用Ubuntu软件包管理器aptitudeapt-get来安装Jenkins,我不知道在哪里可以改变分配给Jenkins的堆空间量。

4 个答案:

答案 0 :(得分:67)

在Jenkins作业运行时,您可能会遇到两种类型的OutOfMemoryError消息:

  • java.lang.OutOfMemoryError: Heap space - 这意味着你 需要增加分配给Jenkins的堆空间量 守护进程开始。
  • java.lang.OutOfMemoryError: PermGen space - 这意味着你需要增加 分配用于存储Java对象元数据的生成空间量。增加 -Xmx参数的值不会影响此错误。

在Ubuntu 12.04 LTS上,取消注释JAVA_ARGS第10行的/etc/default/jenkins设置:

  • 要添加更多Java堆空间,请增加-Xmx Java参数的值。这设置了内存分配池(垃圾收集堆)的最大大小。
  • 要添加更多PermGen空间,请添加参数XX:MaxPermSize=512m(如果需要更多,请将512替换为其他内容。永久生成堆包含有关用户类的元信息。

例如,在全新安装Jenkins之后,此摘录来自默认/etc/default/jenkins

# arguments to pass to java
#JAVA_ARGS="-Xmx256m"

如果将堆空间设置为1 GB,则会出现这种情况:

# arguments to pass to java
JAVA_ARGS="-Xmx1048m"

小心不要将堆大小设置得太大,因为你分配的内容会减少操作系统和其他程序可用的内存量,这可能会导致过多的分页(内存在RAM和交换盘之间来回交换,这将减慢你的系统速度。)

如果您还设置MaxPermSpace,则需要在参数之间添加空格:

# arguments to pass to java
JAVA_ARGS="-Xmx1048m -XX:MaxPermSize=512m"

进行更改后,从Jenkins Web界面中优雅地重新启动Jenkins,或者使用sudo /etc/init.d/jenkins restart强制立即从命令行重新启动。

我发现以下网站对于理解Java最大和永久生成堆大小非常有用:http://www.freshblurbs.com/blog/2005/05/19/explaining-java-lang-outofmemoryerror-permgen-space.html

答案 1 :(得分:26)

对于CentOS,默认情况下Jenkins.xml所在的目录是/ etc / sysconfig / for jenkins-1.579-1.1

JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Xmx -XX:MaxPermSize="

答案 2 :(得分:10)

如果您使用的是Ubuntu Server,请先安装Monitoring插件,看看Jenkins正在使用多少内存。例如,这是我在安装后看到的:

enter image description here

然后,使用命令free -m,我弄清楚服务器的内存大小是多少。就我而言,16Gb。有了这些信息,我打开了/etc/default/jenkins并更改了:

JAVA_ARGS="-Djava.awt.headless=true"

JAVA_ARGS="-Xmx8384m -Djava.awt.headless=true"

8384是8Gb。然后我使用命令sudo service jenkins restart重新启动Jenkins,然后,在触发了导致内存问题的工作后,事情看起来好多了,并且可以在此次和后续运行中完成工作:

enter image description here

答案 3 :(得分:1)

另一种为特定作业设置堆大小的方法是为每个作业使用环境变量。这样可以确保在不使用需要更高内存的作业时可用的内存。

GRADLE_OPTS="-Dorg.gradle.jvmargs=-Xms1024M -Xmx8192M -XX:PermSize=512M -XX:MaxPermSize=2048 -XX:+CMSClassUnloadingEnabled -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8"

JAVA_OPTS="-XX:MaxPermSize=2048M"

Jenkins job config