这对我有用:
SONAR_RUNNER_OPTS="-Xmx3062m -XX:MaxPermSize=512m -XX:ReservedCodeCacheSize=128m"
我直接在声纳 - 跑步者(.bat)文件中设置它
我知道这个帖子有点旧,但这个信息可能对某人有帮助。
对我来说问题不像C ++插件的顶级答案所暗示的那样。 相反,我的问题是Xml-Plugin( https://docs.sonarqube.org/display/PLUG/SonarXML ) 在我停用后,分析再次起作用。
问题出在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
您可以通过一些Findbugs规则创建自己的质量配置文件,然后逐渐添加更多,直到达到他的OutOfMemoryError。可能只有一条规则会导致所有这些失败,因为您的代码违反了它 - 如果您停用此规则,它肯定会起作用。
我遇到了同样的问题并找到了一个非常不同的解决方案,也许是因为我很难吞下以前的答案/评论。拥有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
然后在sonar.properties文件中将这些其他扩展名添加为排除项:
sonar.exclusions=**/*.doc,**/*.docx,**/*.ipch
然后将内存限制恢复为常规数量。
%JAVA_EXEC% -Xmx1024m -XX:MaxPermSize=512m -XX:ReservedCodeCacheSize=128m %SONAR_RUNNER_OPTS% ...
与maven一起运行声纳时遇到了同样的问题。在我的情况下,它有助于分别调用声纳:
mvn clean install && mvn sonar:sonar
代替
mvn clean install sonar:sonar
http://docs.sonarqube.org/display/SONAR/Analyzing+with+Maven
备注:由于我的解决方案与maven连接,因此这不是问题的直接答案。但它可能会帮助其他用户填补它。