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

Ste*_*HHH 42 java heap ubuntu out-of-memory jenkins

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

Ste*_*HHH 69

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

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

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

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

例如,/etc/default/jenkins在全新安装Jenkins之后,此提取是默认设置:

# arguments to pass to java
#JAVA_ARGS="-Xmx256m"
Run Code Online (Sandbox Code Playgroud)

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

# arguments to pass to java
JAVA_ARGS="-Xmx1048m"
Run Code Online (Sandbox Code Playgroud)

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

如果你也设置了MaxPermSpace,你需要在参数之间添加一个空格):

# arguments to pass to java
JAVA_ARGS="-Xmx1048m -XX:MaxPermSize=512m"
Run Code Online (Sandbox Code Playgroud)

进行更改后,从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.


小智 27

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

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

  • 干杯,我几乎疯了,试图找到这个 (3认同)

Jua*_* NR 12

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

在此输入图像描述

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

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

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

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

在此输入图像描述

  • 您也可以说 -Xmx8g ,它与 -Xmx8384m 相同,但更简单。 (2认同)