Oracle 数据库服务器在 SonarQube 6.7.5 扫描期间使用几乎所有内存

Oracle DB server using almost all memory during SonarQube 6.7.5 scan

使用 Sonar 6.7.5 与 Oracle 12c 的 JDBC 连接。驱动版本为12.2.0.1.0。 Java JDK 1.8.0_111.

运行 mvn sonar:sonar,使用适当的开关仅指定源代码的一小部分,因为有时需要 分钟 来处理每个 file,这可能是因为数据库服务器内存使用率达到 96%。很多代码写得非常糟糕(复杂的遗留代码有很多贡献者和很多问题)并没有帮助。

你建议我先看哪里?我尝试使用 SQLDeveloper 工具来监控 activity,但没有注册。 Oracle 数据库与我 运行 SonarQube 在不同的服务器上。

这是我无法从中复制文件的系统,但我可以根据需要转录 Java 内存设置或其他数据。还请告知我可以检查的日志文件。

其他数据,来自 SonarQube 管理页面:

计算引擎 JVM 状态

最大内存 = 1963MB

可用内存 = 1649MB

系统平均负载 = 146.0%(top 显示高 cpu,但没那么高) 工人数 = 1

我应该 turn off some rules 看看是否有帮助吗?

在 6.7 中,分析 运行ner 没有直接连接到数据库,因此不对数据库进行调整将对 分钟处理每个文件有任何影响 任何问题。

我认为 SonarJava 扫描器难以解析复杂文件是可以预料的,因为这些文件会给符号执行引擎带来困难(它支持例如空指针取消引用检测规则)。如果可以的话,我建议您 运行 在更强大的机器上进行分析工作 - 更多 CPU,分配给 Maven 运行ner 的更多内存。

在您的质量配置文件中禁用规则也会有所帮助,尤其是当其中一些规则目前与您的代码库不相关时。对您的团队采用渐进式增强代码质量的方法可能会有所帮助:从高严重性、高影响规则的子集开始,集中精力修复漏洞(即避免引入新错误)并重构现有代码以降低认知复杂性,然后通过稍后启用其他规则来提高门槛。