应用程序遇到缓慢问题并生成一些 heapdump
文件,heapdump
文件为 1.2GB,我需要运行我的 ha456.jar
> 使用8.4GB RAM只能打开heapdump。
在此之前,当我分析heapdump
时,我会尝试查看较大的LeakSize
并检查Leak Suspect值,我可以看到是哪个类或我的应用程序的哪种方法持有大内存。然后我会尝试修复代码,使其能够以更好的性能运行。
这次,我无法真正弄清楚应用程序的哪个模块/方法导致了内存不足问题。以下是我的 HeapAnalyzer
的一些屏幕截图:
对我来说,它只是普通的类,例如 java/lang/object、java/lang/Long 或 java/util/HashMap。我真的不知道我的应用程序的哪个方法导致内存不足。
感谢您就如何对此进行分析的建议。
最佳答案
对于任何接触代码的人来说,查找内存泄漏总是非常困难的,更不用说到目前为止了。所以我只能给你一些建议:
- 您获得了一个堆转储,按您自己的对象进行过滤并分析谁创建了最多的对象
- 运行您的应用程序并使用 VisualVM 对其进行监控,稍微使用一下该应用程序,然后强制运行 GC...十分之九的对象数量没有明显减少或没有完全重置的对象就是内存泄漏里>
关于java - 如何分析具有常见泄漏嫌疑的heapdump,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59572585/