我的 Jenkins 作业内存不足,在构建日志中给出 java.lang.OutOfMemoryError
消息。但是我使用了 Ubuntu 包管理器、aptitude
或 apt-get
来安装 Jenkins,但我不知道在哪里可以更改分配给的堆空间量 Jenkins 。
最佳答案
在 Jenkins 作业运行时,您可能会遇到两种类型的 OutOfMemoryError
消息:
java.lang.OutOfMemoryError: Heap space
- 这意味着你 需要增加分配给 Jenkins 的堆空间量 守护进程启动。java.lang.OutOfMemoryError: PermGen space
- 这意味着你需要增加 分配用于存储 Java 对象元数据的生成空间量。增加-Xmx
参数的值不会影响这个错误。
在 Ubuntu 12.04 LTS 上,取消注释 /etc/default/jenkins
第 10 行的 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 .
关于java - 在 Ubuntu 上作为守护进程运行时,如何给 Jenkins 更多的堆空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14762162/