我的 Jenkins 作业内存不足,在构建日志中给出 java.lang.OutOfMemoryError
消息。但是我使用了 Ubuntu 包管理器 aptitude
或 apt-get
来安装 Jenkins,但我不知道在哪里可以更改分配给 Jenkins 的堆空间量。
原文由 Steve HHH 发布,翻译遵循 CC BY-SA 4.0 许可协议
我的 Jenkins 作业内存不足,在构建日志中给出 java.lang.OutOfMemoryError
消息。但是我使用了 Ubuntu 包管理器 aptitude
或 apt-get
来安装 Jenkins,但我不知道在哪里可以更改分配给 Jenkins 的堆空间量。
原文由 Steve HHH 发布,翻译遵循 CC BY-SA 4.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
1 回答2.3k 阅读✓ 已解决
2 回答3.8k 阅读
在 Jenkins 作业运行时,您可能会遇到两种类型的
OutOfMemoryError
消息:java.lang.OutOfMemoryError: Heap space
这意味着您需要在守护进程启动时增加分配给 Jenkins 的堆空间量。java.lang.OutOfMemoryError: PermGen space
– 这意味着您需要增加分配给存储 Java 对象元数据的生成空间量。增加-Xmx
参数的值不会影响此错误。在 Ubuntu 12.04 LTS 上,取消注释
JAVA_ARGS
第十行的设置/etc/default/jenkins
:-Xmx
Java 参数的值。这设置了内存分配池(垃圾收集堆)的最大大小。XX:MaxPermSize=512m
(如果需要更多,请将512
替换为其他参数。永久代堆保存有关用户类的元信息。例如,此提取物来自默认的
/etc/default/jenkins
在全新安装 Jenkins 之后:这是将堆空间设置为 1 GB 时的样子:
注意不要将堆大小设置得太大,因为无论您分配什么都会减少操作系统和其他程序可用的内存量,这可能会导致过度分页(内存在 RAM 和交换磁盘之间来回交换,这会减慢你的系统宕机了)。
如果你还设置
MaxPermSpace
,你需要在参数之间添加一个空格):进行更改后,从 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。