我一直在我的电脑上本地测试我的webapp并使用VisualVM进行监控。我最近也开始使用JMeter,因为我建议我应该做一些负载测试,因为我怀疑我的内存泄漏很慢。
今天我的webapp终于抛出了OutOfMemory
异常。如果发生这种情况,我设置了HeapDumpOnOutOfMemoryError
和HeapDumpPath
参数。生成了堆转储文件。
我在VisualVM中打开了这个文件(java_pid2760.hprof),老实说,我不明白我应该如何确定这个内存泄漏的罪魁祸首......
如何使用VisualVM分析堆转储并找到产生内存泄漏的类/实例?
答案 0 :(得分:3)
在调试内存泄漏时,我发现了一些有用的链接:
http://olex.openlogic.com/wazi/2009/how-to-fix-memory-leaks-in-java/
http://www.ibm.com/developerworks/rational/library/05/0816_GuptaPalanki/
修改强>
您可能还想尝试: http://rejeev.blogspot.com/2009/04/analyzing-memory-leak-in-java.html
答案 1 :(得分:1)
使用VisualVM分析堆转储和精确定位内存泄漏并不容易,如果这是您第一次处理此类问题,我建议不要使用此工具。考虑下载HPjmeter并让它为您完成工作。
打开转储文件后,选择Sorted Reference Graph Subtree选项。这将显示webapp中按大小排序的所有对象。在大多数内存泄漏情况下,您正在泄漏一种在堆中随时间膨胀的Object类型。 HPjmeter将帮助您快速识别此案例。