2015-11-03 92 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找到。