Jprofile 用于分析 hprof 中存在大量 hashmap 条目的 meomery 泄漏

Jprofile to analysis meomery leak in hprof where there is plenty of hashmap entries

我最近接管了一个JAVA-基于WEB 的SOA 系统,但直到现在它运行得并不好。其中一个 springboot 应用程序将占用高达 100% 的 CPU 使用率。通过使用 jastack,我了解到大多数 Cpu 使用是由 GC 线程进行的,因为 jvm 中有些东西无法收集和删除。我做了转储,hprof 文件大小约为 20Gbk,这似乎太大了。

通过使用Jprofiler我碰巧知道有很多hashmap条目,总共大约有80,635,782个实例(如下所示)。
Jprofiler Heapwalker results 所以这些Hashmap条目中肯定有一些meomery泄漏(可能是不正确的键)。但是实例太多所以很难找到发生memeory泄漏的正确位置。(也许我没有找到正确的使用Jprofiler的方法) too many instances to find.

如果你能帮忙,我将不胜感激,如何处理这么多instances.THKS!

在 heap walker 的引用视图(你的第二个屏幕截图)中,顶部有一个视图模式(在屏幕截图中设置为“传出引用”)。要查看条目中包含的内容,请将其更改为“合并传出引用”。

但是,要找到泄漏,您还必须反过来思考并询问是什么保留了哈希映射条目。为此,请选择“合并传入引用”视图模式。

为了查看“主导引用”,“合并主导引用”视图模式很有用。对于树中的每个节点,如果从堆中删除相应的对象,它将释放所有祖先节点。