Maven 2 奇怪的Maven内存不足错误

Maven 2 奇怪的Maven内存不足错误,maven-2,hudson,maven,Maven 2,Hudson,Maven,我目前正在尝试使用hudson调用maven来构建我的项目。我一直在解决记忆错误的问题。我在所有环境变量、hudson配置和hudson项目配置中设置了xmx和xms。我将xmx设置为1500MB,这应该足够了,因为整个项目的容量小于1000mb。用于构建项目的机器是存储团队的maven repo的服务器 有人遇到过同样的问题吗?知道它是如何发生的吗?假设您正在使用Sun的JDK,那么在Hudson/Manage Hudson/Maven Project Configuration/Global

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


有人遇到过同样的问题吗?知道它是如何发生的吗?

假设您正在使用Sun的JDK,那么在Hudson/Manage Hudson/Maven Project Configuration/Global Maven_OPTS中设置以下内容:-Xmx512m-XX:MaxPermSize=256m

Hudson启动一个单独的任务来运行Maven作业。您需要在MAVEN_OPTS文本字段中配置增加的内存。该字段位于各个作业配置窗口中

编辑:跟进您的评论。您是碰巧分叉编译,在单独的执行中运行它,还是分叉junit测试

在编译器配置中尝试(假设有):

512m

一定要确保有足够的MaxPermSpace。我遇到了分配给JVM的内存足够的问题,但OutOfMemoryError是由于PermSpace耗尽造成的。当我们处理编译代码时,这种情况并不少见——特别是当它正在编译代码时,将其丢弃并再次编译。有关调整垃圾收集器(和内存)的更多信息,请参阅以下参考:


在第16-17页的内存管理白皮书中,它概述了OutOfMemory错误的可能原因。另一种防御措施是分叉maven进程和/或编译器。

如果在测试期间得到OOM,则必须告诉surefire插件分叉新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>

org.apache.maven.plugins
maven surefire插件
2.5
一旦
-Xms512m-Xmx512m

谢谢大家回答我的问题。我通过创建一个堆转储并对其进行分析,解决了这个问题。我通过传递以下VM参数来进行堆转储:

-XX:+heapdumponotofmemoryerror-XX:HeapDumpPath=E:///code>

然后,我使用打开
java_pidxxxxx.hprof
文件

我发现我们用来捕获异常的侦听器无法捕获异常。因此,异常类型保留在VM中,因此,内存泄漏


再次感谢所有的答案

我也遇到了同样的问题。当尝试插入代码时,hudson(或JVM)会将java抛出内存。解决方案是:在插件cobertura maven plugin的
配置中,使用
512m

从您的描述中不清楚您使用了哪些选项。它是区分大小写的,你需要精确。查看您得到的确切错误文本会有所帮助,例如,它是否来自Hudson,来自主Maven进程,来自Maven启动的一个子进程,用于运行测试和其他内容。@Java初学者查看我的编辑。也许这些信息会有所帮助。感谢更新,我确实尝试过在测试分离的情况下运行构建,显然构建在没有测试的情况下运行良好,我认为这是导致内存不足错误的测试。通过说testes,我们使用maven surefire插件来运行这些测试。我刚刚读到一篇文章说,Hudson、Maven、JBoss甚至window(我的服务器运行的操作系统)都可能无法支持xmx配置。我只是仔细检查了一下,服务器有4gb内存,xmx设置为1500mb。编译器配置?这是否意味着Maven配置适用于我的情况?Windows不应该对Xmx vm参数有任何问题。试着看看hudson是如何处理maven可执行文件的。查看它是否正在使用vm参数运行maven命令。如果是这样的话,那么带有1.5gigs的OOM很可能是测试的问题。在linux中,ps-aef将显示带有参数的maven进程。它可能是使用classworlds JARs启动的。我确信,我得到的内存不足错误没有与permgen空间联系起来,因为我们实际上是从permgen空间错误开始讨论这个内存不足错误。如果不直接动手,很难对系统进行故障排除。我链接的文档是否有助于您找到需要尝试的内容?您很可能必须在垃圾收集器运行时对其进行分析,以帮助您找到原因。文档告诉您如何做。您是否验证更改xmx/xms是否适用?我刚刚使用Vision VM对模块进行了Java评测,通过将评测与其他模块进行比较,失败的模块似乎有很多休眠线程,而其他模块则没有。这就是内存不足错误的原因吗?我们不得不这样做,因为我们以前的很多单元测试没有清理线程和它们使用的其他资源。当我们询问ant脚本的作者时,他告诉我们,使用新vm比修复单元测试更容易。叹息这么多技术债务。@java初学者:可能吧。您必须关闭所有文件,将所有引用设置为null,并清理您的测试在tearDown()中使用的任何内容:JUnit将为每个测试创建一个测试类实例,并将它们保留到所有测试都运行为止。经过多次尝试,这至少是我问题的答案。尽管使用了更大的Xmx:)
<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>