Java 詹金斯的PermGen错误
我曾经遇到过詹金斯失败的案例,但詹金斯的重新部署(詹金斯是Tomcat中的一个Web应用程序)帮了我的忙。即使新作业也因PermGen空间错误而失败,但所有设置都很好(所有这些Java 詹金斯的PermGen错误,java,tomcat,ubuntu,jenkins,Java,Tomcat,Ubuntu,Jenkins,我曾经遇到过詹金斯失败的案例,但詹金斯的重新部署(詹金斯是Tomcat中的一个Web应用程序)帮了我的忙。即使新作业也因PermGen空间错误而失败,但所有设置都很好(所有这些-XX:PermSize参数都是可能的)。关键是在重新部署之后,一切都像一个魔咒一样工作。但这是一个严酷的解决方案。我想知道,是否有一些方法可以让詹金斯州立大学退学。提前谢谢 更新:好吧,对于那些可能面临类似情况的人,以下是我的想法。那些认为最好将Jenkins部署为Tomcat模块的人可能没有遇到任何类型的项目部署问题(
-XX:PermSize
参数都是可能的)。关键是在重新部署之后,一切都像一个魔咒一样工作。但这是一个严酷的解决方案。我想知道,是否有一些方法可以让詹金斯州立大学退学。提前谢谢
更新:好吧,对于那些可能面临类似情况的人,以下是我的想法。那些认为最好将Jenkins部署为Tomcat模块的人可能没有遇到任何类型的项目部署问题(使用Jenkins部署插件或maven的
pom.xml
中的Tomcat maven插件)。单独安装Jenkins时,我没有遇到我描述的任何问题。唷 也许这个问题可以帮助你:
这里有一些非常好的答案。我曾经遇到过类似的错误:jenkins正在执行maven构建,其中包括surefire测试执行。我发现我使用的maven版本(V2之类)没有将我的JVM内存选项传递给surefire进程分叉,一些测试因此失败。MAVEN_选项,JAVA_选项,都不起作用
我最终直接在settings.xml中传递了内存选项,PermGen错误就消失了
以下是我使用的选项(应用程序相当大):
-Xms512m-Xmx1024m-XX:PermSize=512m-XX:MaxPermSize=1024m完全未经测试的建议,但建议在启动Tomcat时使用-XX:+cmsclasssUnloadingEnabled-XX:+CMSPermGenSweepingEnabled
,但是,建议在Java 6上不需要CMSClassUnloadingEnabled
,并且-XX:+useConMarkSweepGC
必须用于CMSClassUnloadingEnabled
才能有效
假设底层问题是由于Tomcat实例的PermGen空间中不必要地维护了类而导致的,那么至少-XX:+cmsclasssUnloadingEnabled
可以做到这一点。对于PermGen空间错误来说,真正重要的设置是(而且必须是这样):
1破折号,2大Xs、大M、大p、大S,无空格,大小以兆欧为单位,小写M。如果你搞砸了,它将被忽略。我看到的所有PermGen修复中99%的“不起作用”都是因为有人没有严格按照说明操作,用大M表示兆字节而不是小M,或者在前面放两个破折号而不是一个破折号
而且,512兆只是一个起点。。。调整以适应您的系统。我发现将JRE
升级到java8
有帮助。默认情况下,Jenkins使用主文件夹下的JRE
,由Jenkins.xml
任务调用我通过添加到Jenkins.conf
解决了Linux中的PermGen
错误:
wrapper.java.additional.4=-XX:PermSize=1024M
你在ubuntu下运行吗?如果是,则需要覆盖/etc/default/tomcat设置。否则,您可以尝试使用Jrockit JVM运行tomcat,而Jrockit JVM不会出现永久空间问题。@jocelyn Yep,这是Ubuntu,我试图覆盖这些设置。Jrockit可能是一个解决方案,但由于Jenkins的原因,改变JVM还是有点奇怪。谢谢,但我试图扩大所有这些内存参数,但没有帮助。谢谢,也许我需要它,但在我的情况下,PermGen总是在一开始出现,而不是在执行测试或其他什么的时候。“一个破折号,两个大X,一个大M,一个大P,一个大S,没有空格,用梅格表示大小”让我哈哈大笑,很好!
wrapper.java.additional.4=-XX:PermSize=1024M