Sonar - OutOfMemoryError:Java堆空间

she*_*rma 20 sonar-runner sonarqube

我正在使用"Findbugs"作为配置文件在Sonar上部署一个大型Java项目并获得以下错误:

Caused by: java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError:
Java heap space
Run Code Online (Sandbox Code Playgroud)

我试图解决这个问题:

  1. 将%SONAR_RUNNER_OPTS%替换为-Xms256m -Xmx1024m以增加sonar-runner bat文件中的堆大小.
  2. 在Sonar全局参数中将"sonar.findbugs.effort"参数设置为"Min".

但上述两种方法对我都不起作用.

Rya*_*ton 14

我遇到了同样的问题并找到了一个非常不同的解决方案,也许是因为我很难吞下以前的答案/评论.拥有1000万行代码(比F16战斗机的代码更多),如果每行有100个字符(一个疯狂的大小),你可以将整个代码库加载到1GB的内存中.我设置了8GB的内存,但仍然失败了.为什么?

答:因为社区Sonar C++扫描程序似乎有一个错误,它会在其扩展名中选择带有字母"c"的任何文件.这包括.doc,.docx,.ipch等.因此,它耗尽内存的原因是因为它试图读取一些它认为是300mb纯代码的文件,但实际上它应该被忽略.

解决方案:查找项目中所有文件使用的扩展(请参阅此处):

dir /s /b | perl -ne 'print $1 if m/\.([^^.\\\\]+)$/' | sort -u | grep c
Run Code Online (Sandbox Code Playgroud)

然后在sonar.properties文件中将这些其他扩展名添加为排除项:

sonar.exclusions=**/*.doc,**/*.docx,**/*.ipch
Run Code Online (Sandbox Code Playgroud)

然后将内存限制恢复为常规数量.

%JAVA_EXEC% -Xmx1024m -XX:MaxPermSize=512m -XX:ReservedCodeCacheSize=128m %SONAR_RUNNER_OPTS% ...
Run Code Online (Sandbox Code Playgroud)


seo*_*.ch 11

这对我有用:

SONAR_RUNNER_OPTS="-Xmx3062m -XX:MaxPermSize=512m -XX:ReservedCodeCacheSize=128m"
Run Code Online (Sandbox Code Playgroud)

我直接在声纳 - 跑步者(.bat)文件中设置它

  • `export SONAR_SCANNER_OPTS =" - Xmx3062m -XX:MaxPermSize = 512m -XX:ReservedCodeCacheSize = 128m"`如果您使用的是SonarQube Scanner 2.5+并且在Linux上 (4认同)
  • 从传递的值中删除"=" (2认同)

Mat*_*att 7

与maven一起运行声纳时遇到了同样的问题.在我的情况下,它有助于分别调用声纳:

mvn clean install && mvn sonar:sonar

代替

mvn clean install sonar:sonar

http://docs.sonarqube.org/display/SONAR/Analyzing+with+Maven

备注:由于我的解决方案与maven连接,因此这不是问题的直接答案.但它可能会帮助其他用户填补它.


Fab*_*eam 2

您可以做什么,首先使用一些 Findbugs 规则创建自己的质量配置文件,然后逐步添加越来越多的规则,直到遇到 OutOfMemoryError。可能只有一条规则会导致所有这些失败,因为您的代码违反了它 - 如果您停用该规则,它肯定会起作用。