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

新手上路,请多包涵

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

原文由 Steve HHH 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 554
2 个回答

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

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

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

  • 要添加更多 Java 堆空间,请增加 -Xmx Java 参数的值。这设置了内存分配池(垃圾收集堆)的最大大小。
  • 要添加更多 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。

原文由 Steve HHH 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

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

原文由 AvianFLU 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题