内存不足 - 从 Java 执行声纳嵌入式运行器后无法删除persistit_tempvol文件



我有一组项目需要执行声纳。一旦我执行声纳任务并发布结果,它就会删除目录 .sonartemp 中的所有文件,除了文件persistit_tempvol。此文件被 Java SE 运行时锁定,我无法删除它。

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

我尝试增加堆内存,但项目数量非常高~100。我不想一个接一个地执行它们。我想继续在循环中这样做。

我正在运行声纳运行器 2.4、视窗 7、Java 8、声纳蚂蚁任务 2.3、声纳 Qube 5.1

以下是我执行声纳转轮的方式:

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

属性是声纳的属性文件。

我想我无法从声纳中删除此文件,因为它被我的 JVM 锁定。有没有办法删除这个文件?

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

仅供参考,我们目前正在努力改进嵌入式模式,以支持运行多个连续分析而没有任何资源泄漏(SQ Runner 2.5 + SQ 服务器 5.2)。

ForkedRunner.create().addProperties(properties).execute();

这就是我所要做的,现在工作正常。谢谢:)

最新更新