我目前正在尝试使用hudson来构建我的项目来调用maven。我不断遇到记忆错误的问题。我在所有环境变量,hudson配置和hudson项目配置中设置了xmx和xms。我将xmx设置为1500 mb,这应该足够大,因为整个项目小于1000mb。用于构建项目的机器是存储团队的maven repo的服务器。
任何人都遇到了同样的问题?知道它是如何发生的吗?
答案 0 :(得分:11)
如果你在测试期间得到一个OOM,那么你必须告诉surefire插件 fork 一个新的VM进行测试:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.5</version>
<configuration>
<forkMode>once</forkMode>
<argLine>-Xms512m -Xmx512m</argLine>
</configuration>
</plugin>
答案 1 :(得分:6)
谢谢大家回答我的问题。我通过进行堆转储并对其进行分析来解决问题。我通过传递以下VM args来进行堆转储:
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=E:/
。
然后我使用Eclipse Memory Analyser打开java_pidxxxxx.hprof
文件。
我发现我们用来捕获异常的监听器无法捕获异常。因此异常类型停留在VM中,因此内存泄漏!
再次感谢所有答案
答案 2 :(得分:1)
确保您有足够的MaxPermSpace。我遇到了分配给JVM的内存足够的问题,但是OutOfMemoryError是由于PermSpace耗尽造成的。当我们处理编译代码时,这并不常见 - 特别是如果它正在编译代码,抛弃它并再次编译。有关调整垃圾收集器(和内存)的更多信息,请查看以下参考:
在第16-17页的内存管理白皮书中,它概述了OutOfMemoryErrors的可能原因。另一个防御是分叉maven进程和/或编译器。
答案 3 :(得分:0)
假设您正在使用Sun的JDK,那么在Hudson / Manage Hudson / Maven项目配置/全局MAVEN_OPTS中设置以下内容:-Xmx512m -XX:MaxPermSize = 256m
答案 4 :(得分:0)
Hudson开始执行Maven工作的单独任务。您需要在MAVEN_OPTS文本字段中配置增加的内存。该字段位于各个作业配置窗口中。
编辑:跟进您的评论。您是否偶然请求编译,在单独的执行中运行它或者为您的junit测试进行分析。
尝试编译器配置(假设你有一个):
<maxmem>512m</maxmem>
答案 5 :(得分:0)
我遇到了同样的问题。当试图检测代码时,hudson(或JVM)将java抛出内存。解决方案是:在configuration of plugin cobertura-maven-plugin
中,使用<maxmem>512m</maxmem>
。