You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin多项目迁移Gradle后测试报OutOfMemoryError,已配大内存仍失败如何解决

调整方案
  • 优化内存分配,避免总内存超出Jenkins节点上限
    你当前配置的内存总和存在超售问题:Gradle守护进程分配16G、单元测试4个并行fork每个4G共16G、集成测试单fork16G,三类进程同时运行时内存总需求远高于常规Jenkins节点配置,调整如下:

    1. 降低Gradle守护进程内存:将gradle.properties中org.gradle.jvmargs的-Xmx16g改为-Xmx4g,Kotlin多子项目构建无需给守护进程分配过高内存,节省出的内存留给测试任务使用
    2. 按需降低测试任务内存配置:如果Jenkins节点总内存低于24G,将单元测试maxHeapSize改为2G、maxParallelForks改为2,集成测试maxHeapSize改为8G
    3. 删掉无效JVM参数:移除gradle.properties中-XX:+CMSClassUnloadingEnabled参数,该参数仅适配CMS垃圾回收器,默认GC下无效,新增-XX:+UseG1GC参数提升大内存场景下的垃圾回收效率
  • 修复测试任务配置冲突与不合理项

    1. 删除测试任务中冗余的测试引擎配置:你在unit-tests和int-tests任务中同时配置了useJUnit()(JUnit4)和useJUnitPlatform()(JUnit5),二者会同时加载两套测试引擎额外占用内存,保留你实际使用的版本即可
    2. 调整集成测试的setForkEvery配置:当前配置为每执行1个测试类就重启测试JVM,scrypt属于内存密集型操作,频繁重启JVM会导致旧进程内存未及时释放造成内存占用堆叠,改为setForkEvery(20)或直接移除该配置(仅当测试存在内存泄漏必须重启进程时保留)
    3. 新增堆外内存限制:scrypt运算会产生较高的堆外内存占用,在集成测试任务中新增配置jvmArgs = listOf("-XX:MaxDirectMemorySize=4G", "-XX:+UseG1GC"),避免堆外内存占满节点总内存
  • 可选优化:如果调整后仍有OOM问题,可临时关闭org.gradle.parallel=true和org.gradle.configureondemand=true,确认是否是并行构建导致的任务重叠内存占用过高。

内容的提问来源于stack exchange,提问作者fridgepolice

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 20:42:03