Jenkins 构建因 OOM 失败:无法创建新的本机线程

Jenkins 构建因 OOM 失败:无法创建新的本机线程

我正在一个具有 2GB RAM 的 VServer 上设置一个 jenkins 实例,并且没有运行其他任何程序(使用率 < 200MB),运行 CentOS 6.7。

当在所述实例上启动 jenkins 构建时,jenkins 运行时总是出现此错误gradle --debug --stacktrace test

19:26:50.727 [错误] [org.gradle.BuildExceptionReporter] 原因:java.lang.OutOfMemoryError:无法创建新的本机线程

由于这似乎是不允许太多线程的情况,因此我将 ulimit 提高到:

[root@xxx]# runuser -s /bin/bash jenkins -c 'ulimit -u'

16384

我还尝试了不同的 jenkins JVM 内存分配标志,给实例 200MB 或 1GB 没有任何变化,降低堆栈大小以留出本机线程的空间也无济于事。

当我以 root 身份运行相同的 gradle 命令时,gradle 会挂起并出现类似的错误:

19:29:14.939 [QUIET] [system.out] Error occurred during initialization of VM
19:29:14.940 [QUIET] [system.out] java.lang.OutOfMemoryError: unable to create new native thread
19:29:14.941 [QUIET] [system.out]       at java.lang.Thread.start0(Native Method)
19:29:14.941 [QUIET] [system.out]       at java.lang.Thread.start(Thread.java:714)
19:29:14.942 [QUIET] [system.out]       at java.lang.ref.Reference.<clinit>(Reference.java:187)

我还能尝试其他什么方法来修复此问题吗?

答案1

您需要增加分配给 Gradle JVM 本身的堆大小,这不是从 Jenkins 配置继承的。您可以使用环境变量指定它GRADLE_OPTS,也可以在 Jenkins 中通过“管理 Jenkins > 配置系统 > 全局属性 > 环境变量”全局指定。您将添加GRADLE_OPTS具有适当设置的变量。您还可以在 Gradle 调用时通过在命令前添加环境变量来执行此操作,例如:

GRADLE_OPTS="-Xmx256m" ./gradlew build

相关内容