当Jenkins作为一个守护进程在Ubuntu上运行时,我如何给予它更多的堆空间?

t1qtbnec  于 2022-11-21  发布在  Jenkins
关注(0)|答案(5)|浏览(176)

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

gywdnpxw

gywdnpxw1#

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 的 最 大 值 。

5rgfhyps

5rgfhyps2#

对于CentOS,Jenkins.xml默认位于/etc/sysconfig/(对于jenkins-1.579-1.1)目录中
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Xmx -XX:MaxPermSize="

c6ubokkw

c6ubokkw3#

如果你使用的是Ubuntu服务器,首先安装Monitoring插件,看看Jenkins使用了多少内存,比如我安装后看到的是:

然后,使用命令free -m,我计算出了服务器的内存大小,在我的例子中是16GB。
JAVA_ARGS="-Djava.awt.headless=true"

JAVA_ARGS="-Xmx8384m -Djava.awt.headless=true"
其中8384是8Gb。然后我使用命令sudo service jenkins restart重新启动Jenkins,然后在触发出现内存问题的作业后,情况看起来好多了,作业可以在这次和后续运行中完成:

8fq7wneg

8fq7wneg4#

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

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"

wz8daaqr

wz8daaqr5#

我费了好大劲才把它做成。这是关键的论点:“_JAVA_选项”

我尝试了所有其他参数,但它总是运行mvn包这样:

导致OutOfMemory异常...(AspectJ问题)
在添加了env var“_JAVA_OPTIONS”之后,在我的日志中我注意到:

终于打通了!
我正在运行Jenkins战争组织。Jenkins-ci.main:Jenkins-战争:2. 190. 3

相关问题