首页 > 解决方案 > 使用单体项目的 Spotbugs 规则运行声纳扫描仪时出错?

问题描述

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) 规则,如漏洞和恶意规则,但它也不适用于有限规则。

标签: javasonarqubeheap-memorysonarqube-scansonarscanner

解决方案


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

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


推荐阅读