奇怪的Maven内存不足错误

时间:2010-10-26 13:45:31

标签: maven-2 hudson maven

我目前正在尝试使用hudson来构建我的项目来调用maven。我不断遇到记忆错误的问题。我在所有环境变量,hudson配置和hudson项目配置中设置了xmx和xms。我将xmx设置为1500 mb,这应该足够大,因为整个项目小于1000mb。用于构建项目的机器是存储团队的maven repo的服务器。

任何人都遇到了同样的问题?知道它是如何发生的吗?

6 个答案:

答案 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>