Jenkins 中的 PermGen 错误

Posted

技术标签:

【中文标题】Jenkins 中的 PermGen 错误【英文标题】:PermGen errors in Jenkins 【发布时间】:2012-06-23 15:40:56 【问题描述】:

我遇到过 Jenkins 失败的案例,但只有 Jenkins 重新部署(Jenkins 是 Tomcat 中的一个 webapp)有所帮助。即使是新作业也因 PermGen 空间错误而失败,但所有设置都很好(所有这些 -XX:PermSize 参数在任何可能的地方)。关键是重新部署后,一切都像魅力一样。但这是一个苛刻的解决方案。我想知道,是否有一些选项可以回滚 Jenkins 状态。提前致谢。

更新:好的,对于那些可能面临类似情况的人,这就是我的发现。那些写过最好将 Jenkins 部署为 Tomcat 模块的人可能不会遇到任何类型的项目部署问题(使用 Jenkins Deploy 插件或使用 Maven 的pom.xml 中的tomcat-maven-plugin)。单独安装 Jenkins 时,我没有遇到任何我描述的问题。呼!

【问题讨论】:

你是在ubuntu下运行的吗?如果是,您需要覆盖 /etc/default/tomcat 设置。否则,您可以尝试使用不会出现 permgenspace 问题的 Jrockit JVM 运行 tomcat。 @jocelyn 是的,它是 Ubuntu,我试图覆盖这些设置。 Jrockit 可能是一个解决方案,但还是因为 Jenkins 而改变 JVM 有点奇怪。 【参考方案1】:

对 PermGen 空间错误真正重要的一个设置是(它必须是这个完全正确):

-XX:MaxPermSize=512m

一个破折号,两个大X,大M,大P,大S,无空格,以meg为单位的大小,更低案例 m。如果你把它搞砸了,它将被忽略。在我看到的所有 PermGen 修复中,99% 的“不起作用”是因为有人没有严格按照说明进行操作,而是使用 Big-M 表示兆字节而不是 little-m,或者在前面放两个破折号而不是一个例子。

此外,512 megs 只是一个起点...调整以适应您的系统。

【讨论】:

"一个破折号,两个大X,大M,大P,大S,无空格,大小- megs”让我哈哈大笑,太好了!【参考方案2】:

我曾经遇到过类似的错误:jenkins 正在执行 maven 构建,其中包括执行肯定的测试。我发现我使用的 maven 版本(V2 的东西)没有将我的 JVM 内存选项传递给 surefire 进程分支,因此一些测试失败了。 MAVEN_OPTS、JAVA_OPTS,都没有工作。

我最终直接在 settings.xml 中传递了我的内存选项,并且 PermGen 错误消失了。

这是我使用的选项(应用程序相当大):

-Xms512m -Xmx1024m -XX:PermSize=512m -XX:MaxPermSize=1024m

【讨论】:

谢谢,也许我需要那个,但就我而言,PermGen 总是出现在最开始,而不是在执行测试或其他操作时出现。【参考方案3】:

完全未经测试的建议,但this answer 建议在启动 Tomcat 时使用-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled(尽管在完全不同的上下文中出现问题)。但是,This answer 建议 CMSPermGenSweepingEnabled 在 Java 6 上是不必要的,-XX:+UseConcMarkSweepGC 必须用于 CMSClassUnloadingEnabled 才能生效。

至少-XX:+CMSClassUnloadingEnabled 可以解决问题,假设根本问题是由在您的 Tomcat 实例的 PermGen 空间中不必要地维护类引起的。

【讨论】:

【参考方案4】:

也许这个问题可以帮助你:

How to give Jenkins more heap space when it´s started as a service under Windows?

那里有一些非常好的答案。

【讨论】:

谢谢,但是我试着把这些内存参数都放大了,没有用。【参考方案5】:

我发现将JRE 转换为Java 8 很有帮助。默认情况下,Jenkins 使用主文件夹下的JRE,由jenkins.xml 任务调用

【讨论】:

【参考方案6】:

我通过添加到jenkins.conf 解决了Linux 中的PermGen 错误:

wrapper.java.additional.4=-XX:PermSize=1024M

【讨论】:

以上是关于Jenkins 中的 PermGen 错误的主要内容,如果未能解决你的问题,请参考以下文章

JBoss 5 perm 大小和堆大小

生产服务器上的 Tomcat、PermGen 和重新部署

如何清除tomcat中的PermGen空间错误

出现 OutOfMemoryError:在詹金斯中执行 maven 构建时 PermGen 空间

JVM内存区域划分Eden SpaceSurvivor SpaceTenured Gen,Perm Gen解释

[转]JVM内存区域划分Eden SpaceSurvivor SpaceTenured Gen,Perm Gen解释