当它在Ubuntu上作为一个守护进程运行时,我怎样给Jenkins更多的堆空间?

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

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

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

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

  • 要添加更多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 。

对于CentOS,Jenkins.xml默认位于的目录是/ etc / sysconfig / for jenkins-1.579-1.1

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

如果您使用的是Ubuntu服务器,请首先安装Monitoring插件以查看Jenkins使用的内存量。 例如,这是我安装后看到的:

在这里输入图像说明

然后,用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,然后在触发出现内存问题的工作之后,事情看起来好多了,这个工作就可以完成,

在这里输入图像说明