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 错误的主要内容,如果未能解决你的问题,请参考以下文章
出现 OutOfMemoryError:在詹金斯中执行 maven 构建时 PermGen 空间