【发布时间】: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
-
build.gradle - 包含 ant 任务的导入(清理、构建、单元测试)
使用 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
问题
-
为什么 ant task max Xmx size in 540 MB 足以用于测试,而对于 GradleWorkerMain 1.5GB 不够?
-
我是 gradle 新手,所以我的 build.gradle 可能包含导致的错误 在这种 GradleWorkerMain 奇怪的行为。这是真的吗?有什么可能的解决方案?
-
如何为 GradleWorkerMain jvm 提供更多 Xmx?
【问题讨论】:
-
这个问题的后续是here
-
您评论中的链接已损坏。
-
我删除了损坏的链接,因为我没有这些图片了。
标签: gradle