我正在使用“Findbugs”作为配置文件在Sonar上部署一个大型Java项目,并收到以下错误:
Caused by: java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError:
Java heap space
我试图解决这个问题:
但上述两种方法对我都不起作用。
答案 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