加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

GradleWorkerMain OutOfMemoryError

发布时间:2020-12-14 05:40:02 所属栏目:Java 来源:网络整理
导读:我正在尝试对基于蚂蚁的(Netbeans RCP)项目进行评分并找到奇怪的gradle行为. 我用剖析器做了一些观察并得到了下一个结果. 环境配置 Gradle 1.9Build time: 2013-11-19 08:20:02 UTCBuild number: noneRevision: 7970ec3503b4f5767ee1c1c69f8b4186c4763e3dGro
我正在尝试对基于蚂蚁的(Netbeans RCP)项目进行评分并找到奇怪的gradle行为.
我用剖析器做了一些观察并得到了下一个结果.

环境配置

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任务的导入(清理,构建,单元测试)
> settings.gradle

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

Gradle fork为此分离jvm并使用不同的Xmx值运行JUnitTestRunner,忽略
$GRADLE_OPTS和$ANT_OPTS值:
– 108.80 MB

> 540 MB
> 183 MB

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

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

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

–java.lang.OutOfMemoryError: GC overhead limit exceeded

–console log

–snapshot

更多细节:

–gradle main jvm details

–GradleWorkerMain jvm details

问题

>为什么ant任务max Xmx大小在540 MB足以进行测试而GradleWorkerMain 1.5GB还不够?
>我是新手,因此可能是我的build.gradle包含错误导致的结果
在这样的GradleWorkerMain奇怪的行为.这是真的吗?什么可能的解决方案?
>如何为GradleWorkerMain jvm提供更多Xmx?

解决方法

要控制Gradle测试JVM可用的内存量,请配置相应的测试任务.例如:
test {
    maxHeapSize = "1024m"
    jvmArgs "-XX:MaxPermSize=256m"
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读