25

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

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

我试图解决这个问题:

  1. 将 %SONAR_RUNNER_OPTS% 替换为 -Xms256m -Xmx1024m 以增加 sonar-runner bat 文件中的堆大小。
  2. 将“sonar.findbugs.effort”参数作为“Min”放入 Sonar 全局参数中。

但是以上两种方法都不适合我。

4

8 回答 8

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

然后将这些其他扩展作为排除项添加到您的 sonar.properties 文件中:

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

然后将您的内存限制设置回常规数量。

%JAVA_EXEC% -Xmx1024m -XX:MaxPermSize=512m -XX:ReservedCodeCacheSize=128m %SONAR_RUNNER_OPTS% ...
于 2013-12-09T22:05:03.927 回答
13

这对我有用:

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

我直接在 sonar-runner(.bat) 文件中设置它

于 2013-06-26T07:40:21.590 回答
7

使用 Maven 运行声纳时,我遇到了同样的问题。就我而言,它有助于单独调用声纳:

mvn clean install && mvn sonar:sonar

代替

mvn clean install sonar:sonar

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

备注:因为我的解决方案连接到 maven,所以这不是问题的直接答案。但它可能会帮助其他绊倒它的用户。

于 2014-08-31T09:06:12.040 回答
2

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

于 2012-10-19T06:42:39.063 回答
2

I know this thread is a bit old but this info might help someone.

For me the problem was not like suggested by the top-answer with the C++ plugin. Instead my problem was the Xml-Plugin (https://docs.sonarqube.org/display/PLUG/SonarXML) after I deactivated it the analysis worked again.

于 2016-09-07T11:31:00.357 回答
1

您可以通过增加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
于 2019-10-20T10:29:46.200 回答
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

于 2012-10-19T06:44:07.867 回答
0

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

于 2019-07-09T20:31:24.287 回答