内存溢出异常 - VisualVM如何通过堆转储文件帮助定位内存泄漏?

4
我一直在本地PC上测试我的Web应用程序,并使用VisualVM进行监控。最近,我开始使用JMeter,因为有人建议我做一些负载测试,因为我怀疑我在某个地方存在缓慢的内存泄漏。
今天,我的Web应用程序终于抛出了OutOfMemory异常。我已经设置了HeapDumpOnOutOfMemoryError和HeapDumpPath参数以防万一发生这种情况。生成了一个堆转储文件。
我在VisualVM中打开了这个文件(java_pid2760.hprof),老实说,我不明白如何能够定位这个内存泄漏的罪魁祸首...
你如何使用VisualVM分析堆转储并找到生成内存泄漏的类/实例?

可能是重复的问题:如何分析.hprof文件? - meriton
还有相关的链接:http://stackoverflow.com/questions/2064456/how-much-memory-does-jprofiler-need-to-analyze-a-heap-dump-of-size-x,https://dev59.com/CErSa4cB1Zd3GeqPW4BE,http://stackoverflow.com/questions/2422868/how-to-analyze-heap-dumps - meriton
我的问题是关于使用VisualVM来定位内存泄漏的。这个随JDK一起提供的产品应该可以做到,不是吗?我感谢使用其他类型软件的建议,但既然我有VisualVM,我想坚持使用它。有人用过VisualVM找到内存泄漏吗? - katura
2个回答


1

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

打开转储文件后,选择排序参考图子树选项。这将显示按大小排序的Web应用程序中的所有对象。在大多数内存泄漏情况下,您会泄漏一种类型的对象,该对象随着时间的推移在堆中膨胀。 HPjmeter将帮助您快速识别此情况。


@ Amir Afghani - 我不认为我可以使用HPjmeter,因为我没有HP系统。该软件适用于HP-UX 11i系统。 - katura
是的,你可以。HPjmeter控制台是一个Java程序。你可以在任何系统上运行它。 - Amir Afghani
安装在Windows 8.1上失败了。经过谷歌搜索发现有人声称它与这个版本的Windows不兼容。 - Ilya Serbis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接