15

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

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

4

6 回答 6

34

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

-XX:MaxPermSize=512m

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

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

于 2012-06-21T13:57:41.937 回答
6

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

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

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

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

于 2012-06-21T12:49:10.203 回答
4

完全未经测试的建议,但这个答案建议-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled在启动 Tomcat 时使用(尽管在完全不同的上下文中出现问题)。然而,这个答案CMSPermGenSweepingEnabled表明这在 Java 6 上是不必要的,-XX:+UseConcMarkSweepGC必须使用CMSClassUnloadingEnabled它才能有效。

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

于 2012-06-21T13:44:18.933 回答
1

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

当它在 Windows 下作为服务启动时,如何给 Jenkins 更多的堆空间?

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

于 2012-06-21T12:03:37.890 回答
0

PermGen通过添加以下内容解决了 Linux 中的错误jenkins.conf

wrapper.java.additional.4=-XX:PermSize=1024M
于 2018-05-16T11:05:26.537 回答
0

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

于 2016-12-06T02:47:08.983 回答