Java 从ANT运行junitreport时发生OutOfMemoryError
我们有一份Jenkins的工作来测试我们的应用程序。执行时,我们会在执行目标时得到著名的OutOfMemoryError,该目标使用以下代码段生成junitreportJava 从ANT运行junitreport时发生OutOfMemoryError,java,ant,jenkins,environment-variables,out-of-memory,Java,Ant,Jenkins,Environment Variables,Out Of Memory,我们有一份Jenkins的工作来测试我们的应用程序。执行时,我们会在执行目标时得到著名的OutOfMemoryError,该目标使用以下代码段生成junitreport <junitreport todir="${tmp.dir}/reports-test-shared"> <fileset dir="${tmp.dir}/reports-test-shared"> <include name=
<junitreport todir="${tmp.dir}/reports-test-shared">
<fileset dir="${tmp.dir}/reports-test-shared">
<include name="TEST-*.xml" />
</fileset>
<report format="frames" todir="html" />
</junitreport>
编辑:build.xml中的第818行是上面显示的junitreport任务
我已经看过其他问题中提出的一些建议,例如,和
最常见的建议是
在JAVA_选项中增加Xms和Xms
在ANT_选项中增加Xmx和Xms
以下是我迄今为止所做的工作:
将环境变量JAVA_OPTS设置为-Xms512m-Xmx2048m
将环境变量ANT_OPTS设置为-Xms512m-Xmx2048m
在tomcat/bin目录中创建setenv.sh,我在其中执行以下操作:export JAVA_OPTS=$JAVA_OPTS-Xms512m-Xmx2048m
在环境变量JAVA_OPTS和ANT_OPTS中添加了-XX:MaxPermSize=256m
我的问题如下。我不知道我所做的内存设置是否是ANT用来运行报表生成junitreport的设置
我必须在何处增加堆大小才能使junitreport在没有OutOfMemoryError的情况下终止?尝试如下设置junit ant目标的maxmemory选项
<junit maxmemory="512m" fork="true">
注意,根据junit ant目标,您需要设置fork=true,以便获取maxmemory元素。否则它将被忽略。尝试如下设置junit ant目标的maxmemory选项
<junit maxmemory="512m" fork="true">
注意,根据junit ant目标,您需要设置fork=true,以便获取maxmemory元素。否则将被忽略。请尝试添加
-Xms512m
-Xmx1024m
-XX:MaxPermSize=256m
请尝试添加
-Xms512m
-Xmx1024m
-XX:MaxPermSize=256m
这样的问题可以用另一种方法解决。我没有增加堆空间,而是试图找到需要如此大空间的原因。我发现一个测试向sysout写入了大量信息。这导致生成的xml文件大于200mb。显然对于2或3 gb的堆大小来说太大了。这样的问题可以用另一种方法解决。我没有增加堆空间,而是试图找到需要如此大空间的原因。我发现一个测试向sysout写入了大量信息。这导致生成的xml文件大于200mb。显然对于2或3 gb的堆大小来说太大了。中出现了此错误。普遍的共识是,这是由用于生成报告的XSLT内存消耗过多造成的,在ANT中不会修复 对我来说,有效的方法是增加传递给ant的最大堆大小,例如-Xmx3304m 在Jenkins中,您可以在InvokeAnt>Advanced>JavaOptions中将最大堆大小传递给ANT 并添加类似-Xmx2000m的内容
关于实际最大堆大小值,建议它应该是物理内存的1/4或1GB,以较小者为准。但是,您可能需要超出1GB限制才能避免此内存错误。请参阅Oracle网站上的指南。此错误已在中提出。普遍的共识是,这是由用于生成报告的XSLT内存消耗过多造成的,在ANT中不会修复 对我来说,有效的方法是增加传递给ant的最大堆大小,例如-Xmx3304m 在Jenkins中,您可以在InvokeAnt>Advanced>JavaOptions中将最大堆大小传递给ANT 并添加类似-Xmx2000m的内容
关于实际最大堆大小值,建议它应该是物理内存的1/4或1GB,以较小者为准。但是,您可能需要超出1GB限制才能避免此内存错误。请参阅Oracle网站上的指南。这不完全是詹金斯的问题。。我已重新标记以为您找到合适的专家这是build.xml中818行的junitreport任务吗?@Petrosemiuk:是的。这完全不是Jenkins的问题。。我已重新标记以为您找到合适的专家这是build.xml中818行的junitreport任务吗?@Petrosemiuk:是的。对不起,我没有提到我们不使用junit任务进行测试,而是使用pde.launch.test.product。对不起,我没有提到我们不使用junit任务进行测试,而是使用pde.launch.test.product。您的意思是显式地将堆大小设置为该值还是一般地设置它们?我设置了MaxPermSize,但没有帮助。您的意思是显式地将堆大小设置为该值还是一般地设置它们?我设置了MaxPermSize,但没用。我发现了类似的东西。特别是一个测试输出的跟踪信息太多,导致junitreport任务失败。关闭跟踪解决了这个问题。如果在以后的某个时间,测试由于某种原因失败,那么为调试行为打开跟踪是一件小事。特别是一个测试输出的跟踪信息太多,导致junitreport任务失败。关闭跟踪解决了这个问题。如果在以后的某个时间,测试由于某种原因失败,那么为t打开跟踪是一件小事 他在表演。