流口水潜在的内存泄漏?

问题描述 投票:0回答:0

最近我们的微服务“生活”在 Kubernetes 上的 pod 上,由于堆内存不足相关问题而失败。到那时没问题,我们提供了更多资源,一切都按预期进行。鉴于这一事件,我们开始采取一些堆转储来分析它们并检查根本原因可能是什么。

MAT 工具分析发现 3 个泄漏嫌疑人,如下所示: MAT Heap Analysis

我们还使用了JXRay工具进行了分析,结果如下: JXRay Heap Analysis

一切都与流口水有关,这就是我们使用 VisualVM 检查对象内存使用情况的原因: VisualVM Objects Tree

在 MVELCompilationUnit 下有将近 50.000 个对象引用 org.drools.core.base.mvel.MVELCompilationUnit#1 , org.drools.core.base.mvel.MVELCompilationUnit#2......50.000

这有意义吗?

此时值得一提的是,我们的项目 atm 使用了将近 1000 条通过外部 kjar 加载的规则。 通过执行触发所有规则的操作并随后执行手动 GC 来使用 VisualVM 进行分析不会显示任何问题,因为堆内存随后会被清理。

另外关于我们的代码 atm:

我们使用有状态的流口水会话,为每个用户创建一个 KiesSession,它触发所有规则两次,并在其旅程结束时被处置。

So.. 你认为这实际上是内存泄漏吗? 我们如何进一步调查它? 我们应该使用不同的实例化/触发规则的方法吗?也许会话池可以提供帮助?

提前致谢。

java spring-boot memory-leaks heap-memory drools
© www.soinside.com 2019 - 2024. All rights reserved.