我在Mac Mini上运行一个Jenkins版本的Android项目(10.9.5)。詹金斯构建与像这样的错误消息失败:为詹金斯/ gradle增加PermGen空间
<package>.myTest > test_myTest FAILED
org.mockito.cglib.core.CodeGenerationException at test_myTest.java:65
Caused by: java.lang.reflect.InvocationTargetException at test_myTest.java:65
Caused by: java.lang.OutOfMemoryError at test_myTest.java:65
java.lang.OutOfMemoryError: PermGen space
这有时随后的消息像
Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "/0:0:0:0:0:0:0:1:50340 to /0:0:0:0:0:0:0:1:50339 workers Thread 2"
16:47:17
16:47:17 Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "/0:0:0:0:0:0:0:1:50340 to /0:0:0:0:0:0:0:1:50339 workers Thread 4"
16:47:18
16:47:18 Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "/0:0:0:0:0:0:0:1:50340 to /0:0:0:0:0:0:0:1:50339 workers Thread 5"
16:47:18
16:47:18 Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "/0:0:0:0:0:0:0:1:50340 to /0:0:0:0:0:0:0:1:50339 workers Thread 6"
16:47:19
它通常无法在构建的相同点。根据Jenkins wiki
你是否一直在构建的同一阶段看到OOME?如果是这样,也许它只需要更大的内存。
这可能意味着我只需要更多的PermGen空间。
我读过的stackoverflow文章/博客文章表明我需要增加最大PermGen大小(例如,-XX:MaxPermSize=1024M
)。但是,我不清楚在哪里可以做到这一点。
我已经改变了这对GRADLE_OPTS
和JAVA_OPTS
所以我的詹金斯生成环境是这样的:
如截图所见,我还添加了一些选项,垃圾回收烫发根建议here。
这似乎是行得通的 - 昨天我有一些成功的构建,但现在失败了(没有我知道的变化)。
读完this answer后,我在项目的gradle.properties
文件中也更改了下面一行。
org.gradle.jvmargs=-Xms1024M -Xmx2048M -XX:PermSize=512M -XX:MaxPermSize=2048 -XX:+CMSClassUnloadingEnabled -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
这并没有解决问题。
类似问题的答案,如this和this让我觉得我可能正在接近这个错误的方式 - 我应该改变运行Jenkins的Mac(10.9.5)的计算机设置吗?什么是修改PermGen空间的正确方法?
编辑:我以前想过,也许环境变量没有被确定,但我证实它们出现在构建结果的环境变量(jenkins/job/<Project>/146/injectedEnvVars/
)
谢谢你的回应!我没有意识到测试是在单独的JVM上运行的,所以你的回答让我走上了正确的轨道。等待期结束后,我会奖励赏金。 – Michiyo