java - 在 Ubuntu 上作为守护进程运行时,如何给 Jenkins 更多的堆空间?

标签 java ubuntu jenkins out-of-memory heap-memory

我的 Jenkins 作业内存不足,在构建日志中给出 java.lang.OutOfMemoryError 消息。但是我使用了 Ubuntu 包管理器、aptitudeapt-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/

相关文章:

java - 连接器/J getConnection 有语法错误但没有语法

java - 多态性和构造函数

python - uwsgi 无法打开 python 文件/root/.../wsgi.py (DJANGO)

ubuntu - 在 Ubuntu 14.04 上安装 Riak KV

Jenkins 管道条件分支构建

maven - 为单个 Jenkins 作业构建多个 Maven 配置文件

java - 如何在两个 servlet 之间通过 apacheMQ 发送消息?

java - Android 日期格式帮助

bash - 为什么我的 "ll"命令不在一个帐户中运行,而是在另一个帐户中运行?

Jenkins 管道阶段 - 传递整个文件