【问题标题】:Unable to execute Sonar: Caused by: Java heap space无法执行 Sonar:原因:Java 堆空间
【发布时间】:2013-06-24 08:48:34
【问题描述】:

我正在使用 Sonar Runner 2.2 并设置 SONAR_RUNNER_OPTS=-Xmx8000m,但我收到以下错误:

Final Memory: 17M/5389M
INFO: ------------------------------------------------------------------------
ERROR: Error during Sonar runner execution
ERROR: Unable to execute Sonar
ERROR: Caused by: Java heap space

这怎么可能?

【问题讨论】:

  • 使用 VM 参数作为 -Xms512m -Xmx1024m

标签: sonarqube sonar-runner


【解决方案1】:

我遇到了同样的问题并找到了一个非常不同的解决方案,可能是因为我不相信之前的任何答案/cmets。如果有 1000 万行代码(这比 F16 战斗机中的代码多),如果每行有 100 个字符(一个疯狂的大小),您可以将整个代码库加载到 1GB 的内存中。简单的数学。为什么 8GB 内存会失效?

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

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

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

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

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

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

【讨论】:

    【解决方案2】:

    如果您允许堆空间增加到 8000m,这并不意味着您将始终有足够的物理内存到达那里,因为您的操作系统上运行的其他进程也会消耗内存。例如,如果您的机器上“只有”8GB RAM,那么堆空间可能永远无法达到您设置的最大值。

    顺便说一句,我不知道您要分析什么,但我从未见过有人需要这么多内存来分析项目。

    【讨论】:

    • 机器有 24GB RAM。该项目有超过 80k LOC 和许多违规行为。我会用低于 Max 的 sonar.findbugs.effort 再试一次。
    • 您还可以从使用质量较轻的配置文件开始。使用所有可用规则运行分析显然会消耗更多内存 - 而且它不会对您有更多帮助,因为挖掘结果将非常困难。
    • 仅供参考,Sonar 3.6 主要解决了具有数百万个问题时的内存热点:jira.codehaus.org/browse/SONAR-4360
    • 但是对于 4GB 的分页文件,虽然分页需要很长时间,但它仍然可以工作。
    【解决方案3】:

    我在运行测试用例时遇到了同样的问题。在Visuval VM 的帮助下,分析了在测试用例执行期间分配给 PermGen 的最小和最大内存,发现它为 PermGen 分配了 80MB。因此,可以通过 pom.xml 在属性部分进行管理,如下所示。

    <properties>
        <argLine>-XX:PermSize=256m -XX:MaxPermSize=256m</argLine>
    </properties>
    

    这个&lt;argLine&gt; 标签,我们可以在&lt;maven-surefire-plugin&gt;&lt;properties&gt; 中使用。使用 in section 的优点是,测试用例和声纳都可以使用相同的配置。请找到参考here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-15
      • 1970-01-01
      • 2015-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-22
      相关资源
      最近更新 更多