【问题标题】:Travis Maven build exits with OutOfMemoryExceptionTravis Maven 构建退出并出现 OutOfMemoryException
【发布时间】:2015-03-04 12:18:22
【问题描述】:

我有一个在 Travis(dockerized)上运行的 maven 构建,它在我的命令行上构建得很好。几天后,我在测试用例中收到了java.lang.OutOfMemoryError: GC overhead limit exceeded。这总是在 AspectJ 测试用例中发生。

最后一次构建的输出是https://travis-ci.org/dresden-ocl/dresdenocl/builds/53030457

我没有进行任何深入的更改。而且我没有触及应用程序的 AspectJ 部分。我用 JAVA_OPTS、MAVEN_OPTS 测试了各种东西,甚至在 pom.xml 中为 tycho-surefire-plugin 传递了更多 RAM。没有任何帮助。

我怎样才能摆脱错误并让我的所有测试再次运行?我认为他们改变了 Travis 方面导致错误的任何内容。

【问题讨论】:

    标签: maven travis-ci aspectj-maven-plugin tycho-surefire-plugin


    【解决方案1】:

    GC overhead limit exceeded 表示您的 JVM 将大部分时间用于垃圾收集,这表明存在一些严重问题。这无法通过JAVA_OPTSMAVEN_OPTS 解决,因为这是一个编程(代码)问题。您可以尝试添加

    -XX:-UseGCOverheadLimit
    

    但不建议这样做。如需更多信息,请参阅thisthat

    【讨论】:

    • 这怎么可能一年都没有引起问题,现在突然总是让 Travis 上的构建失败?
    • 如果没有访问代码和构建环境,这很难猜到。您应该检查干净运行和第一次发生此异常之间的变化。由于它在您的测试中:您是否建立了一个仅执行一个简短测试的巨大测试环境?但这只是我的猜测......
    【解决方案2】:

    解决方案声明为here,并引用了Travis CI provides MAVEN_OPTS 的问题。因此,如果您对提供的 MAVEN_OPTS 值不满意,则无法在容器化环境中构建,因为没有可用的 sudo。

    before_install: 
      - sudo rm /etc/mavenrc
      - export M2_HOME=/usr/local/maven
      - export MAVEN_OPTS="-Dmaven.repo.local=$HOME/.m2/repository -Xms1024m -Xmx3072m -XX:PermSize=512m"
    

    This pull request 将使您对 MAVEN_OPTS 的更改生效。因此,您可以更改 MAVEN_OPTS 而无需使用上述解决方法,因此可以使用 Maven 的容器化构建。

    【讨论】:

      【解决方案3】:

      尝试增加堆栈大小,例如通过ulimit -s 82768 并重试。要检查限制,请运行 ulimit -afree -m 以获取可用内存。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-26
        • 2017-04-22
        相关资源
        最近更新 更多