设置Maven将分拆的Child JVM进程的permgen大小

ecb*_*die 11 java permgen maven maven-jetty-plugin jenkins

我正在Jenkins构建服务器上构建Maven Java应用程序.我java.lang.OutOfMemoryError: PermGen space在Jenkins构建期间遇到了很多次(但从未在我的localhost上),因此它无法构建.

我已经尝试过设置MAVEN_OPTSJenkins:我进入了Jenkins- > Manage Jenkins- > Configure system- > Global MAVEN_OPTS并且设置为-Xms512m -Xmx1024m -XX:MaxPermSize=512m -XX:PermSize=512m.尽管将其设置为这个高价值,我们仍然会遇到PermGen空间问题.我不想将MAVEN_OPTS设置为更高的值; 我不知道我的应用程序如何需要一个空间,我宁愿深入研究高内存使用问题.

最近,我一直在想,也许permgen空间问题不是来自Maven本身,而是来自Maven旋转的JVM进程之一(例如:插件).我提出这个假设,因为Maven仍然能够执行TestNG测试,尽管已经吐出了我们的permgen空间错误线.导致PermGen错误的一个这样的插件是Jetty:

Oct 31, 2012 7:55:37 AM com.google.apphosting.utils.jetty.JettyLogger warn
WARNING: handle failed
java.lang.OutOfMemoryError: PermGen space
Run Code Online (Sandbox Code Playgroud)

因此,我想知道:

MAVEN_OPTS变量是否也适用于Maven构建旋转的子JVM进程?如果没有,那么如何为这些子进程(如Jetty)设置JVM选项?

注意:我使用的是Maven 3.0.4.

Kkk*_*kev 7

生成Java进程的大多数Maven插件都有自己的方式来指定JVM命令行参数.例如,您可以使用argLine配置参数在Surefire插件生成的进程中配置堆和permgen大小(请参阅http://maven.apache.org/plugins/maven-surefire-plugin/test-mojo.html#argLine).

Jetty插件不会产生进程,因此heap和permgen由提供给Maven进程的JVM参数控制.

如果从Jenkins运行时内存不足,但在本地运行时没有,请检查Jenkins传递给Maven的MAVEN_OPTS.