2012-06-21 35 views
15

我曾经遇到Jenkins失败的情况,但Jenkins重新部署(Jenkins是Tomcat中的web应用程序)。即使是新的作业也会因PermGen空间错误而失败,但所有设置都没有问题(所有这些参数都可以使用到这些-XX:PermSize参数)。重新部署之后,所有事情都像魅力一样。但这是一个苛刻的解决方案。我想知道,如果有一些选择回滚詹金斯状态。提前致谢。Jenkins中的PermGen错误

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

+0

你在ubuntu下运行吗?如果是的话,你需要覆盖/ etc/default/tomcat设置。否则,您可以尝试运行带有Jrockit JVM的tomcat,该JVM不会遇到permgenspace问题。 – jocelyn

+0

@jocelyn是的,这是Ubuntu,我试图覆盖这些设置。 Jrockit可能是一个解决方案,因为Jenkins而改变JVM仍然有点奇怪。 –

回答

6

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

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

下面是我所使用的选项(该应用程序是相当大):

-Xms512m -Xmx1024m -XX:PermSize =512米-XX:MaxPermSize参数=1024米

+1

谢谢,也许我会需要,但在我的情况下,PermGen总是出现在最开始,而不是执行测试或其他事情。 –

4

完全未经检验的建议,但this answer建议使用-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled当启动Tomcat时(虽然在完全不同的上下文中的问题)。但是,This answer表明在Java 6上不需要CMSPermGenSweepingEnabled,并且-XX:+UseConcMarkSweepGC必须用于CMSClassUnloadingEnabled才能生效。

至少-XX:+CMSClassUnloadingEnabled可以做到这一点,假设底层问题是由于在Tomcat实例的PermGen空间中不必要地维护类而引起的。

+0

谢谢,但我尝试过。我找到了解决方案,请参阅更新。 –

34

的一个设置,真正重要的PermGen space的错误,是(而且必须是这个正是):

-XX:MaxPermSize=512m 

一个破折号,2个大XS,大-M,大端P,Big-S,无空格,尺寸大小,小写字母 m。如果你搞砸了,它将被忽略。我发现“不工作”的所有PermGen修复中的99%是因为有人没有按照指示精确地使用Big-M而不是使用Big-M,而是使用Big-M而不是使用Big-M,例。

此外,512兆只是一个起点...适应您的系统。

+7

“**一** **,**两**大X,大M,大P,大S,无空格,大小在megs”让我大声笑,很好! –

0

我发现撞JREJava 8帮助。默认情况下,Jenkins使用主文件夹下的JRE,由jenkins.xml任务调用