【问题标题】:GradleWorkerMain OutOfMemoryErrorGradleWorkerMain OutOfMemoryError
【发布时间】:2013-12-10 09:05:13
【问题描述】:

我正在尝试对基于 ant(Netbeans RCP)的项目进行分级,并发现奇怪的分级行为。 我用 profiler 做了一些观察,得到了下一个结果。

环境配置

Gradle 1.9
Build time:   2013-11-19 08:20:02 UTC
Build number: none
Revision:     7970ec3503b4f5767ee1c1c69f8b4186c4763e3d

Groovy:       1.8.6
Ant:          Apache Ant(TM) version 1.9.2 compiled on July 8 2013
Ivy:          2.2.0
JVM:          1.7.0_45 (Oracle Corporation 24.45-b08)
OS:           Linux 2.6.32-431.el6.x86_64 amd64

$ echo $GRADLE_OPTS
-XX:+UnlockCommercialFeatures -XX:+FlightRecorder -Xms256m -Xmx2048m
$ echo $ANT_OPTS
-XX:+UnlockCommercialFeatures -XX:+FlightRecorder -Xms256m -Xmx2048m

使用 gradle 运行导入的 ant junit 测试任务

为此,Gradle fork 单独的 jvm 并使用不同的 Xmx 值运行 JUnitTestRunner,忽略 $GRADLE_OPTS 和 $ANT_OPTS 值

不知道 gradle 如何为每个 JUnitTestRunner ant 任务定义 Xmx 大小。 它工作正常,作为每个任务期间的 GC。 所有模块的所有单元测试都通过且没有错误。

为相同的模块运行 gradle 构建任务

Gradle 知道之前的构建结果并立即开始对未测试模块进行 junit 测试。 您可能会看到输出here! Gradle 为此创建了单独的 jvm(忽略 $GRADLE_OPTS 值)并运行 GradleWorkerMain。 这个 jvm 有 1.42GB Xmx 和 500 MB 立即占领!然后使用的内存大小达到1.5GB。 然后 GC 未知原因无法释放内存并抛出

-java.lang.OutOfMemoryError: GC overhead limit exceeded

-console log

问题

  • 为什么 ant task max Xmx size in 540 MB 足以用于测试,而对于 GradleWorkerMain 1.5GB 不够?

  • 我是 gradle 新手,所以我的 build.gradle 可能包含导致的错误 在这种 GradleWorkerMain 奇怪的行为。这是真的吗?有什么可能的解决方案?

  • 如何为 GradleWorkerMain jvm 提供更多 Xmx?

【问题讨论】:

  • 这个问题的后续是here
  • 您评论中的链接已损坏。
  • 我删除了损坏的链接,因为我没有这些图片了。

标签: gradle


【解决方案1】:

要控制可供 Gradle 测试 JVM 使用的内存量,请配置相应的 Test 任务。例如:

test {
    maxHeapSize = "1024m"
    jvmArgs "-XX:MaxPermSize=256m"
}

【讨论】:

  • 谢谢彼得!这不是内存问题。我将 Xmx 设置为 2048 flight record。现在在测试期间使用的最大堆大小约为 1.6GB,perm gen 大小为 512MB,在测试期间不会超过 70MB。我仍然收到 OutOfMemory 错误并且无法找到它。在这个测试中,我使用了 H2 inmemory DB。通过 ant 任务为这个模块运行单元测试不会抛出这个错误,所有测试都通过了。
  • 我还看到,对于每个测试类 ant 运行另一个 JUnitRunner
  • 4076 Xmx 已解决问题。但是 ant JUninRunner 与 2.31Gb gradle JUnitRunner 最大 540Mb 的结果有点奇怪。
  • 对于那些使用 Java 8 的用户,XX:MaxPermSize 已被删除。
  • 更具体地说:-XX:MaxPermSize 变成了-XX:MaxMetaspaceSize
猜你喜欢
  • 1970-01-01
  • 2011-05-16
  • 2011-01-18
  • 2013-06-21
  • 2013-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多