执行gradle sonar时遭遇OutOfMemoryError问题求助
解决Gradle Sonar扫描时Robolectric加载Jar的OOM问题
执行gradle sonar时出现如下内存溢出错误:
com.gmxx.cn.navigation.viewmodel.mainmap.GmpiCruiseViewModelTest > testPropertyListener FAILED java.lang.OutOfMemoryError: Failed to load /var/workspace/MISC.GMXX.Gradle.Apps.SonarQube.Scan.OnDemand/vendor/gm/packages/apps/GMXXX/.robolectric-dependencies/android-all-10-robolectric-5803371.jar at org.robolectric.shadows.ShadowArscApkAssets9.nativeLoad(ShadowArscApkAssets9.java:267) ... Caused by: java.lang.OutOfMemoryError: Java heap space
已确认Jar文件存在,且配置了export _JAVA_OPTIONS="-Xmx8g -XX:MaxMetaspaceSize=16g -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8"环境变量,以下是可行的解决方案:
为Gradle单独配置JVM参数
全局_JAVA_OPTIONS可能被Gradle自身的配置覆盖,直接在项目根目录的gradle.properties中添加:org.gradle.jvmargs=-Xmx8g -XX:MaxMetaspaceSize=16g -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8或者针对测试任务单独配置,在模块的
build.gradle中添加:tasks.withType(Test) { jvmArgs '-Xmx8g', '-XX:MaxMetaspaceSize=16g', '-XX:+HeapDumpOnOutOfMemoryError', '-Dfile.encoding=UTF-8' }清理Robolectric缓存并检查依赖兼容性
- 删除项目内的
.robolectric-dependencies目录和用户目录下的~/.robolectric缓存,重新执行任务让Gradle拉取完整依赖(缓存损坏可能导致加载时内存异常) - 确认Robolectric版本与Android 10的兼容性,比如Robolectric 4.3及以上版本才支持Android 10,版本不匹配会引发内存相关问题
- 删除项目内的
拆分测试与Sonar扫描流程
先单独执行测试任务gradle test,确认测试本身不会OOM。若测试正常,再执行Sonar扫描并指定已生成的测试报告路径,避免重复执行测试:gradle sonar -Dsonar.junit.reportPaths=build/test-results/test限制并行测试数量
并行测试会大幅增加内存占用,在gradle.properties中添加以下配置关闭并行或限制并行数:org.gradle.parallel=false org.gradle.test.maxParallelForks=1检查系统可用内存
用free -h查看宿主机内存情况,确保系统有足够空闲内存供JVM分配,若系统内存不足,即使配置了堆参数也无法生效
内容的提问来源于stack exchange,提问作者Ranger Zhou
相关产品推荐
相关产品推荐

