【问题标题】:Sonar - OutOfMemoryError: Java heap space声纳 - OutOfMemoryError:Java 堆空间
【发布时间】:2012-10-09 15:58:06
【问题描述】:

我正在使用“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”。

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

【问题讨论】:

    标签: sonarqube sonar-runner


    【解决方案1】:

    我遇到了同样的问题并找到了一个非常不同的解决方案,可能是因为我很难接受以前的答案/cmets。如果有 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% ...
    

    【讨论】:

      【解决方案2】:

      这对我有用:

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

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

      【讨论】:

      • 对我来说,它给出了 无效的最大堆大小:-Xmx512m -XX:MaxPermSize=512m -XX:ReservedCodeCacheSize=128m 无法创建 Java 虚拟机。
      • 从传递的值中删除“=”
      • export SONAR_SCANNER_OPTS="-Xmx3062m -XX:MaxPermSize=512m -XX:ReservedCodeCacheSize=128m" 如果您使用的是 SonarQube Scanner 2.5+ 并且在 Linux 上
      • export SONAR_SCANNER_OPTS="-Xmx3062m -XX:MaxPermSize=512m -XX:ReservedCodeCacheSize=128m" 在 Windows 上也工作过,关于@zacran 评论。
      【解决方案3】:

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

      mvn clean install && mvn sonar:sonar

      而不是

      mvn clean install sonar:sonar

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

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

      【讨论】:

      • 如果你用maven还是有这个问题:export MAVEN_OPTS="-Xms256m -Xmx1024m"
      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        对我来说,问题不像 C++ 插件的最佳答案所建议的那样。 相反,我的问题是 Xml-Plugin (https://docs.sonarqube.org/display/PLUG/SonarXML) 在我停用它后,分析再次起作用。

        【讨论】:

        • 选项在当前(假设是最新的代码库)SonarCloud 中不存在...?
        【解决方案6】:

        您可以通过增加 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
        

        【讨论】:

          【解决方案7】:

          问题出在 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

          【讨论】:

            【解决方案8】:

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

            【讨论】:

              猜你喜欢
              • 2013-01-24
              • 2019-03-06
              • 2015-08-25
              • 2021-02-13
              • 2020-09-14
              • 1970-01-01
              • 1970-01-01
              • 2012-06-21
              • 1970-01-01
              相关资源
              最近更新 更多