2015-11-03 86 views
0

我有一個詹金斯運行,將建立一個Java項目,我知道一些單元測試是相當RAM貪婪。詹金斯與執行JUnit測試時Java堆空間異常

我想我仍然在Jenkins內存分配方面出了問題,我的一些工作失敗,出現了OOM異常,更具體地說是Java堆空間。

我通過編輯/etc/default/jenkins文件給Jenkins本身2GB。爲了確保JUnit測試也具有足夠的RAM,我通過Jenkins GUI將其分配爲Global MAVEN_OPTS-Dmaven.surefire.heap=12g

這應該足以運行所有測試。但構建仍然失敗。我對詹金斯很陌生,所以我會很感激這裏的指針。

+0

是否知道測試是否都在同一個JVM中運行,或者每個JVM啓動了一個新的JVM? – Seb

+0

我不知道。我怎麼看? – toobee

+0

你在surefire插件中設置了reuseForks屬性嗎? – Seb

回答

1

減少運行測試的堆影響的一種方法是在單獨的JVM中運行所有的jUnit測試。這確實與速度有折衷,但是,這意味着每個單獨的測試需要更長的時間。每個方法的時間將保持不變,只是爲每個測試類別設置額外的時間。

您可以在Maven保命插件更改此設置,這些線路在您的POM添加到其設置:關於這個主題

<configuration> 
    <forkCount>1</forkCount> 
    <reuseForks>false</reuseForks> 
</configuration> 

更多信息可以在maven page for forking and parallel test execution找到。