Sonar - OutOfMemoryError:Java堆空间

时间:2012-10-19 04:31:34

标签: sonarqube sonar-runner

我正在使用“Findbugs”作为配置文件在Sonar上部署一个大型Java项目,并收到以下错误:

Caused by: java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError:
Java heap space

我试图解决这个问题:

  1. 将%SONAR_RUNNER_OPTS%替换为-Xms256m -Xmx1024m以增加声纳 - 跑步器bat文件中的堆大小。
  2. 在Sonar全局参数中将“sonar.findbugs.effort”参数设为“Min”。
  3. 但上述两种方法对我都不起作用。

8 个答案:

答案 0 :(得分:13)

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

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

解决方案:查找项目中所有文件使用的扩展程序(see more here):

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

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

sonar.exclusions=**/*.doc,**/*.docx,**/*.ipch

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

%JAVA_EXEC% -Xmx1024m -XX:MaxPermSize=512m -XX:ReservedCodeCacheSize=128m %SONAR_RUNNER_OPTS% ...

答案 1 :(得分:9)

这对我有用:

SONAR_RUNNER_OPTS="-Xmx3062m -XX:MaxPermSize=512m -XX:ReservedCodeCacheSize=128m"

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

中设置它

答案 2 :(得分:7)

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

mvn clean install && mvn sonar:sonar

而不是

mvn clean install sonar:sonar

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

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

答案 3 :(得分:2)

您可以通过一些Findbugs规则创建自己的质量配置文件,然后逐渐添加更多,直到达到他的OutOfMemoryError。可能只有一条规则会导致所有这些失败,因为您的代码违反了规则 - 如果您停用此规则,它肯定会有效。

答案 4 :(得分:2)

我知道这个帖子有点旧,但这个信息可能对某人有帮助。

对我而言,问题与C ++插件的顶级答案不同。 相反,我的问题是Xml-Plugin(https://docs.sonarqube.org/display/PLUG/SonarXML) 在我停用它后,分析再次起作用。

答案 5 :(得分:0)

问题出在FindBugs方面。我想你正在分析一个可能有很多违规行为的大型项目。看一下Sonar邮件列表中有两个问题的线程。您可以自己尝试一些想法。

http://sonar.15.n6.nabble.com/java-lang-OutOfMemoryError-Java-heap-space-td4898141.html

http://sonar.15.n6.nabble.com/java-lang-OutOfMemoryError-Java-heap-space-td5001587.html

答案 6 :(得分:0)

我知道这很旧,但是无论如何我只是在发布我的答案。我意识到我使用的是32位JDK(版本8),在卸载后再安装64位JDK(版本12),问题就消失了。

答案 7 :(得分:0)

您可以通过增加sonar.properties文件中相应Java进程的 -Xmx 内存设置来增加分配给相应进程的最大内存,从而解决此问题

SonarQube/conf/sonar.properties

取消注释以下行,并根据需要增加内存:

For Web: Xmx5123m -Xms1536m -XX:+HeapDumpOnOutOfMemoryError
For ElasticSearch: Xms512m -Xmx1536m -XX:+HeapDumpOnOutOfMemoryError
For Compute Engine: sonar.ce.javaOpts=-Xmx1536m -Xms128m -XX:+HeapDumpOnOutOfMemoryError