【问题标题】:Gradle - OutOfMemoryError when running tests, despite a ton of memoryGradle - 尽管有大量内存,但运行测试时出现 OutOfMemoryError
【发布时间】:2021-08-22 22:30:37
【问题描述】:

我们有一个多子项目 Kotlin 构建 - 我们正在尝试将它从 maven 迁移到 gradle。它的 maven 版本构建良好,并且可以运行所有测试。

在我们的 Jenkins 服务器上运行测试时,Gradle 总是内存不足,尤其是涉及 scrypt 函数的集成测试。同样,这些测试在 maven 下运行时运行良好。

gradle.properties:

org.gradle.daemon=true
org.gradle.parallel=true
org.gradle.configureondemand=true
org.gradle.jvmargs=-Xmx16g -Xms2g -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 -XX:+CMSClassUnloadingEnabled
org.gradle.workers.max=1

毕业典礼:

DEFAULT_JVM_OPTS='"-Xmx16g" "-Xms4g"'

build.gradle.kts: (根)

compileKotlin.kotlinOptions.jvmTarget = JavaVersion.VERSION_1_8.toString()
compileKotlin.kotlinOptions.freeCompilerArgs = listOf("-Xjsr305=strict", "-XXLanguage:-NewInference")

buildSrc/Helpers.kt:

create<Test>("unit-tests") {
        useJUnit()
        useJUnitPlatform()
        maxParallelForks = 4
        maxHeapSize = "4G"
        reports.junitXml.isEnabled = true
        filter {
            setExcludePatterns(*TestPatterns.daoTests)
            isFailOnNoMatchingTests = false
        }
        // prevents unit tests from subprojects from running in parallel (when gradle is run in parallel mode). we're
        // already using junit parallelism.
        // https://discuss.gradle.org/t/disabling-parallel-for-certain-tasks-only/10151
        outputs.files("/tmp/unit_test_lock")
    }

    create<Test>("int-tests") {
        useJUnit()
        useJUnitPlatform()
        maxParallelForks = 1
        setForkEvery(1)
        maxHeapSize = "16G"
        reports.junitXml.isEnabled = true
        filter {
            setIncludePatterns(*TestPatterns.daoTests)
            isFailOnNoMatchingTests = false
        }
        // prevents int tests from subprojects from running in parallel (when gradle is run in parallel mode)
        // https://discuss.gradle.org/t/disabling-parallel-for-certain-tasks-only/10151
        outputs.files("/tmp/int_test_lock")
    }

我可以做些什么来让构建通过?

【问题讨论】:

    标签: kotlin gradle gradle-kotlin-dsl


    【解决方案1】:

    您很可能耗尽了运行构建的机器上的内存 - 因为您为 gradle 和测试任务设置了 16 GB。

    删除 16GB 分配(或恢复为原始大小)。
    gradle.properties - org.gradle.jvmargs=-Xmx16g -Xms2g
    gadlew - DEFAULT_JVM_OPTS='"-Xmx16g" "-Xms4g"'

    create 应该负责测试 JVM。

    【讨论】:

    • 不,不是这样。我有 32GB 的交换空间,16GB 的 RAM。它甚至没有超过 16GB。
    • 你能测试删除这两个条目吗?
    • 是的。我已经测试了一周的组合。我开始时没有这两个条目。
    • 它总共使用了大约 15GB(基线使用量为 4GB,所以总共使用了 11GB,然后是炸弹。)当我运行 maven 构建时,它最高可达 10GB(所以 6GB使用总量。)
    猜你喜欢
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    • 2013-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-06
    • 1970-01-01
    相关资源
    最近更新 更多