使用单体项目的 Spotbugs 规则运行声纳扫描仪时出错?

Posted

技术标签:

【中文标题】使用单体项目的 Spotbugs 规则运行声纳扫描仪时出错?【英文标题】:Getting error while running sonar scanner with Spotbugs rules for monolithic project? 【发布时间】:2019-12-27 19:17:56 【问题描述】:

Findbugs 插件有大约 449 条规则。将所有这些规则应用到我现有的 sonarqube 质量配置文件中并开始声纳扫描,这会占用大量内存来扫描整个项目,并且在一段时间后还会引发错误。

我正在使用Sonarqube version: 7.5 and Spotbugs jar version: 3.9.4

Set SONAR_SCANNER_OPTS=-Xmx10G 用于临时命令提示符会话,但面临 Java 堆空间问题(超出 GC 开销限制)

ERROR: Error during SonarQube Scanner execution
ERROR: Can not execute Findbugs
ERROR: Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded
ERROR: Caused by: GC overhead limit exceeded
ERROR:
ERROR: Re-run SonarQube Scanner using the -X switch to enable full debug logging.

我希望声纳扫描仪能够成功处理一些选定的 Spotbugs(Findbugs) 规则,例如漏洞和恶意规则,但它也不适用于有限规则。

【问题讨论】:

您是否尝试过先使用最小集和应用程序?还是内存问题?不安装 Spotbugs 时也是这样吗? 您好 Jeroen,感谢您的回复。集成 spotbugs 后,我们从项目中随机选择了一些 java 文件并运行扫描。如果我们包含大约 1400 个文件,则扫描成功,但如果数量更高,则扫描由于内存问题而失败。 我们尝试在不安装 spotbugs 的情况下运行扫描,并且应用程序运行良好。 jar release 包含 spotbugs 3.1.12。可以在here 找到文档。在需求部分,您可以阅读:“您应该至少有 512 MB 的内存来使用 SpotBugs。要分析非常大的项目,可能需要更多的内存。”还有:“对 Java 11 及更新版本的支持仍处于试验阶段”。查看您的最后评论,这可能是 SpotBug 而不是 SonarQube 相关问题。 【参考方案1】:

这似乎是内存资源不足的问题。根据:Oracle's Troubleshooting Guide on Memory Leaks,此消息是垃圾收集器在堆内存上运行不足导致抛出此异常的结果。该链接表明您可以使用“-XX:-UseGCOverheadLimit”开关关闭此异常(该过程将继续执行,但可能会降低性能)。

此外,垃圾回收的类型可能是个问题。尝试使用“-XX:+UseConcMarkSweepGC”或“-XX:+UseParallelGC”更改垃圾收集器策略并再次运行。

【讨论】:

以上是关于使用单体项目的 Spotbugs 规则运行声纳扫描仪时出错?的主要内容,如果未能解决你的问题,请参考以下文章

Sonarqube 与声纳扫描仪

将 project.properties 文件传递​​给声纳扫描仪

在 gitlab-ci 中运行声纳扫描仪

从 setup.py 运行声纳扫描仪

声纳:在一个项目中索引了 0 个文件,在另一个项目中正确扫描

使用声纳扫描仪在我的反应项目中意外的令牌 =(在模块模式下使用 espree 解析器)