【问题标题】:surefire HeapDumpOnOutOfMemoryError万无一失的HeapDumpOnOutOfMemoryError
【发布时间】:2011-01-04 18:12:36
【问题描述】:

在 Windows 上的 Maven 中运行我的单元测试时,我遇到了 OutOfMemory 异常。我尝试将 -XX:-HeapDumpOnOutOfMemoryError 选项添加到surefire argLine,但没有生成转储文件。 我也尝试将相同的东西添加到 MAVEN_OPTS,但仍然没有,我只是得到一个 OutOfMemory 异常并且进程挂起,直到我手动杀死它。

我的pom如下:

<plugin>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>                    
        <testFailureIgnore>false</testFailureIgnore>
        <argLine>-Xms512m -Xmx512m -XX:PermSize=256m -XX:-HeapDumpOnOutOfMemoryError</argLine>
        <forkMode>once</forkMode>            
    </configuration>
</plugin>

MAVEN_OPTS:

set MAVEN_OPTS=-XX:-HeapDumpOnOutOfMemoryError

你知道为什么没有生成转储文件吗?

【问题讨论】:

  • @twillouer 的答案是正确的。

标签: maven out-of-memory surefire


【解决方案1】:

您正在使用“-”来禁用该选项。使用“+”启用它:

<argLine>... -XX:+HeapDumpOnOutOfMemoryError</argLine>
                 ^ 

【讨论】:

    【解决方案2】:

    试试这个:

    set MAVEN_OPTS="-Dmaven.surefire.debug=\"-XX:-HeapDumpOnOutOfMemoryError\""
    

    【讨论】:

    • 还是什么都没有。我没有看到任何输出。我设法通过使用分析器连接找到了内存泄漏,所以无论如何感谢您的回复。
    【解决方案3】:

    您的内存泄漏可能刚刚修复,请参阅http://jira.codehaus.org/browse/SUREFIRE-495。您可能想尝试使用 surefire 2.7.1 或更高版本。

    【讨论】:

    • 感谢您的回复,但我的问题与万无一失。我在我的测试中使用了 spring,并且我一遍又一遍地为同一个 bean 使用不同的应用程序上下文。因为 spring 出于性能原因缓存应用程序上下文,所以它们没有被破坏,我得到 OutOfMemory 错误。解决方法是更改​​我的测试以使用相同的上下文,而不是在不同的上下文中复制它们。
    【解决方案4】:

    我想你忘记了路径:

        <argLine>-Xms512m -Xmx512m -XX:PermSize=256m -XX:-HeapDumpOnOutOfMemoryError  -XX:HeapDumpPath=/tmp</argLine>
    

    有了这个论点:

         -XX:HeapDumpPath=/tmp
    

    【讨论】:

    • 这不是必需的。堆转储默认在项目目录中创建(我通过 Netbeans 启动 Maven)。什么时候需要?当前目录何时会不同(并且不可写)?
    猜你喜欢
    • 2011-05-29
    • 1970-01-01
    • 2012-12-24
    • 2010-10-24
    • 2019-04-25
    • 2012-09-16
    • 2016-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多