OutOfMemory异常 - VisualVM如何通过heapdump文件帮助定位内存泄漏?

时间:2011-02-07 17:48:14

标签: java memory-leaks heap out-of-memory visualvm

我一直在我的电脑上本地测试我的webapp并使用VisualVM进行监控。我最近也开始使用JMeter,因为我建议我应该做一些负载测试,因为我怀疑我的内存泄漏很慢。

今天我的webapp终于抛出了OutOfMemory异常。如果发生这种情况,我设置了HeapDumpOnOutOfMemoryErrorHeapDumpPath参数。生成了堆转储文件。

我在VisualVM中打开了这个文件(java_pid2760.hprof),老实说,我不明白我应该如何确定这个内存泄漏的罪魁祸首......

如何使用VisualVM分析堆转储并找到产生内存泄漏的类/实例?

2 个答案:

答案 0 :(得分:3)

答案 1 :(得分:1)

使用VisualVM分析堆转储和精确定位内存泄漏并不容易,如果这是您第一次处理此类问题,我建议不要使用此工具。考虑下载HPjmeter并让它为您完成工作。

打开转储文件后,选择Sorted Reference Graph Subtree选项。这将显示webapp中按大小排序的所有对象。在大多数内存泄漏情况下,您正在泄漏一种在堆中随时间膨胀的Object类型。 HPjmeter将帮助您快速识别此案例。