java - 从 Java 执行 Sonar 嵌入式 Runner 后无法删除 persistit_tempvol 文件

标签 java out-of-memory sonarqube sonar-runner

我有一组项目需要在其上执行 Sonar。一旦我执行 Sonar 任务并发布结果,它就会删除目录 .sonartem 中的所有文件,文件 persistit_tempvol 除外。此文件已被 Java SE 运行时锁定,我无法删除它。

我想删除这个文件的原因是,一旦它开始执行另一个项目,它就会为该项目创建相同的文件,并且之前的 persistit_tempvol 中的数据仍在 Java 堆中。因此,在我运行几个项目后,我实际上出现了 OutOfMemory。

我尝试增加堆内存,但项目数量非常多~100。我不想一个一个去处决他们。我想在循环中继续这样做。

我正在运行 sonarrunner 2.4、windows 7、Java 8、sonar ant task 2.3、Sonar Qube 5.1

这是我执行 Sonar 运行者的方式:

EmbeddedRunner.create().addProperties(properties)
            .unmask("org.apache.tools.ant").unmask("org.sonar.ant")
            .execute();

properties是sonar的属性文件。

我想我不能从 Sonar 中删除这个文件,因为它被我的 JVM 锁定了。有什么办法可以删除这个文件吗?

最佳答案

我想您并不真的需要将 Ant 对象作为扩展传递,因此我建议您尝试使用 ForkedRunner 而不是 EmbeddedRunner。这将允许您从一个干净的 JVM 开始进行每个分析。

仅供引用,我们目前正在努力改进嵌入式模式,以支持在没有任何资源泄漏的情况下运行多个连续分析(SQ Runner 2.5 + SQ server 5.2)。

关于java - 从 Java 执行 Sonar 嵌入式 Runner 后无法删除 persistit_tempvol 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30902855/

相关文章:

java - SonarQube + Reports 中未显示的依赖模块中的聚合覆盖率或覆盖率由 Jacoco 生成

java - 为什么JVM需要预热?

java - 扫描器在使用 next() 或 nextFoo() 后跳过 nextLine()?

Android清除webview线程,释放内存,避免OutOfMemoryError

java - 微小的图像,没有旋转,但仍然得到 OutOfMemoryError : bitmap size exceeds VM budget

linux - 从 gitlab docker runner 启动 Sonar Scanner

java - 如何生成包含涵盖代码中每个方法的测试用例列表的报告?

java - Android - 将图像的位图数组插入 SQLite 数据库

java - 如何操作 JavaFX 应用程序中的所有 Activity 线程

android: LruCache 返回空