Travis Maven 构建退出并出现 OutOfMemoryException

Travis Maven build exits with OutOfMemoryException

我有一个 Maven 构建 运行ning on Travis (dockerized),它在我的命令行上构建得很好。几天以来,我在测试用例中得到了 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 方面导致错误的任何内容。

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

-XX:-UseGCOverheadLimit

但不推荐这样做。有关详细信息,请参阅 this and that

解决方案已说明 and references an issue how 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 进行容器化构建。

尝试增加筹码量,例如按 ulimit -s 82768 并重试。要检查限制,运行 ulimit -afree -m 可用内存。