54

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

4

4 回答 4

82

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

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

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

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

例如,此摘录来自/etc/default/jenkins全新安装 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 。

于 2013-02-07T22:21:53.243 回答
32

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

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

于 2014-09-10T22:42:30.423 回答
20

如果您使用的是 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然后,在触发出现内存问题的作业后,情况看起来好多了,并且该作业可以在此运行和后续运行中完成:

在此处输入图像描述

于 2017-07-03T14:47:49.953 回答
3

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

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"

詹金斯作业配置

于 2020-04-15T06:09:08.680 回答