如何解决SonarScanner执行时报java.lang.OutOfMemoryError: Java heap space错误?
SonarScanner 堆内存溢出问题解决方案
报错信息:
ERROR: Error during SonarScanner execution java.lang.OutOfMemoryError: Java heap space
1. 核心问题定位
你之前调整的sonar.web.javaOpts、sonar.ce.javaOpts等均为SonarQube服务端的JVM参数,扫描阶段抛出的堆内存溢出属于SonarScanner客户端进程的问题,服务端配置对扫描端内存上限不生效,这是该问题最常见的配置误区。
2. 正确配置扫描端内存参数
根据你使用的扫描触发方式,选择对应配置:
- 命令行直接调用sonar-scanner:执行扫描前先设置环境变量
- Linux/macOS:
export SONAR_SCANNER_OPTS="-Xmx4G -XX:MaxMetaspaceSize=512m" - Windows CMD:
set SONAR_SCANNER_OPTS="-Xmx4G -XX:MaxMetaspaceSize=512m" - Windows PowerShell:
$env:SONAR_SCANNER_OPTS="-Xmx4G -XX:MaxMetaspaceSize=512m"
- Linux/macOS:
- CI流水线(如Jenkins)调用:在SonarScanner执行步骤前添加上述环境变量配置,或在SonarScanner全局工具配置中指定JVM参数
- Maven/Gradle触发扫描:
- Maven:
mvn sonar:sonar -Dsonar.scanner.opts="-Xmx4G" - Gradle:
./gradlew sonar -Dsonar.scanner.opts="-Xmx4G"
- Maven:
3. 清理冗余排除规则降低扫描负载
你当前配置的排除规则存在冲突冗余:public/**/*已经完全排除了public目录下的所有内容,后续配置的public/admin/images/**、public/assets/**/*等子路径规则完全无效,多余的规则会额外加重扫描器的规则匹配负担。
建议清理冗余排除项后,可额外添加常见非代码文件排除规则,减少扫描文件量:
sonar.exclusions=**/*.zip,**/*.rar,**/*.jar,**/*.war,**/node_modules/**/*,**/.git/**/*
4. 校验实际扫描范围
执行扫描时添加-X参数开启调试日志,查看Indexing files相关的日志条目,确认是否有不必要的大文件、二进制文件被意外纳入扫描,及时调整排除规则。
5. 大项目拆分扫描
如果是多模块大型项目,可拆分模块单独执行扫描,避免单次扫描加载过多文件导致内存占用过高。
内容的提问来源于stack exchange,提问作者Paras Nakum
相关产品推荐
相关产品推荐

