2012-10-31 15 views
11

我正在Jenkins構建服務器上構建Maven Java應用程序。我在Jenkins的構建過程中多次碰到java.lang.OutOfMemoryError: PermGen space(但從來沒有在我的本地主機上),因此失敗了我的構建。設置Maven將分離的子JVM進程的permgen大小

我已經嘗試了詹金斯設置MAVEN_OPTS:我走進Jenkins - >Manage Jenkins - >Configure system - >Global MAVEN_OPTS並將其設置爲-Xms512m -Xmx1024m -XX:MaxPermSize=512m -XX:PermSize=512m。儘管將其設置爲這個高價值,我們仍然遇到了PermGen空間問題。我不想將MAVEN_OPTS設置爲更高的值;我沒有看到我的應用程序可能需要一個空間,我寧願深入研究高內存使用問題。最近,我一直在想,或許這個permgen空間問題不是來自Maven本身,而是Maven分離的一個JVM進程(例​​如:插件)。我提出這個假設是因爲儘管已經吐出了我們的permgen空間錯誤行,但Maven仍然能夠執行TestNG測試。這導致PermGen的錯誤這樣的一個插件是碼頭:

Oct 31, 2012 7:55:37 AM com.google.apphosting.utils.jetty.JettyLogger warn 
WARNING: handle failed 
java.lang.OutOfMemoryError: PermGen space 

因此,我想知道:

是否MAVEN_OPTS變量也可以應用到子JVM處理一個Maven構建旋轉關閉?如果不是,那麼我如何爲Jetty這些子進程設置JVM選項?

注意:我正在使用Maven 3.0.4。

回答

7

大多數產生Java進程的Maven插件都有自己的指定JVM命令行參數的方法。例如,可以使用argLine配置參數(請參閱http://maven.apache.org/plugins/maven-surefire-plugin/test-mojo.html#argLine)配置由Surefire插件產生的進程中的堆和permgen大小。

Jetty插件不生成進程,所以堆和permgen由提供給Maven進程的JVM參數管理。

如果您在運行Jenkins時內存不足,但在本地運行時不行,請檢查Jenkins傳遞給Maven的MAVEN_OPTS。

+0

我們嘗試設置argLine,但是當我們運行'maven-gae-plugin *'運行'mvn gae:run'時,它不起作用。 – ecbrodie

+1

看看'maven-gae-plugin'的源代碼,你有沒有試過'jvmFlags'參數? – Kkkev

+0

最近我遇到了同樣的問題,所以我嘗試了關於設置'jvmFlags'參數的建議......並且它像一個魅力一樣工作!我的問題是我們在maven-gae-plugin的配置中設置了''標籤,但我們應該一直使用''。謝謝! – ecbrodie

1

您可以全局配置vm選項(設置)並覆蓋任何構建作業。例如。在基於Maven的作業中,MAVEN_OPTS字段隱藏在其中一個「高級」塊中。

1

正如前面所提到的,每個進程都有自己的指定參數的方式。在Jenkins產生的maven子進程的情況下,設置將在Maven構建下的作業配置中。您需要點擊「高級」按鈕並在MAVEN_OPTS字段中設置該選項。例如:-XX:MaxPermSize=256m -Xms512m -Xmx1024m

相關問題