SonarQube是一个静态代码质量检查工具,可以检查出代码中明显或潜在问题。虽然偶尔它的判断会是错误的,但还是值得我们用。它能以比较基础的级别减少代码出错的可能,可以节省人工Review代码时间。它支持多种语言的检查。
我这里是maven项目的java代码。
今天问题的场景是:本来是使用sonar检查单个服务,使用以前文章中介绍的mvn sonar:sonar命令就可以。但服务有将近百个,这样,sonar检查完成后,在浏览器中查看结果,太费劲了。所以,改为使用sonar-scanner一次检查所有服务(方法参照以前文章)。
问题来了:OutOfMemoryError: Java heap space

我尝试了两种方法,第一种没效果(搜索网络时,大部分都是用这个方法,实际没效果),你可以直接略过,使用第二种。
第一种:修改sonar-scanner中的 SONAR_SCANNER_OPTS 的值(官方推荐最好不要使用SONAR_RUNNER_OPTS 参数,会报warning)
cd /sonar-scanner-2.8/bin/ # 进入sonar-scanner目录
vi sonar-scanner # 编辑文件,在文件中追加如下一行内容
export SONAR_SCANNER_OPTS="-Xms1024m -Xmx3036m -XX:MaxPermSize=1024m -XX:ReservedCodeCacheSize=1024m"
ctrl + c # 退出编辑文件
:wq! # 保存文件
修改后,使用sonar-scanner检查代码。问题依然存在。查看问题的图如下(如果你会查看错误,请略过):






第二种:修改sonarqube的参数
cd /sonarqube-6.7.5/conf/ # 进入sonarqube目录
vi sonar.properties # 编辑文件,在文件中把下面一行前面的 # 删掉,把参数修改大些,我直接用3G
sonar.ce.javaOpts=-Xmx3036m -Xms1024m -XX:+HeapDumpOnOutOfMemoryError
# 参数说明:Xmx:应用可用的最大内存数 Xms:应用初始化内存数
ctrl + c # 退出编辑文件
:wq! # 保存文件
重启sonarqube
cd /sonarqube-6.7.5/bin/linux-x86-64/
./sonar.sh restart
使用sonar-scanner检查代码,问题解决。
