Java 如何使用visualvm查找内存泄漏

Java 如何使用visualvm查找内存泄漏,java,memory-leaks,profiling,jvisualvm,Java,Memory Leaks,Profiling,Jvisualvm,我怀疑我们的ActiveMQ连接网桥中有一个严重的内存泄漏-我们看到了典型的内存泄漏模式(应用程序加载正常,如果长时间运行会变慢,或者在短时间内反复重启)。我查阅了查找Java内存泄漏的现代最佳实践,许多开发人员似乎放弃了传统的工具,如jhat/jmap,而代之以新的(er)jvisualvm 在启动这个工具(并花几个小时阅读它的教程)后,我能够为CPU和内存拍摄探查器快照 我只是有点被困在这一点上-我如何分析这些快照来识别泄漏?关于如何使用jvisualvm生成快照,有大量文档,但关于如何真正

我怀疑我们的ActiveMQ连接网桥中有一个严重的内存泄漏-我们看到了典型的内存泄漏模式(应用程序加载正常,如果长时间运行会变慢,或者在短时间内反复重启)。我查阅了查找Java内存泄漏的现代最佳实践,许多开发人员似乎放弃了传统的工具,如jhat/jmap,而代之以新的(er)
jvisualvm

在启动这个工具(并花几个小时阅读它的教程)后,我能够为CPU和内存拍摄探查器快照

我只是有点被困在这一点上-我如何分析这些快照来识别泄漏?关于如何使用jvisualvm生成快照,有大量文档,但关于如何真正理解快照的文档却很少


提前感谢。

使用visualvm分析内存泄漏并不是那么容易。它有一个名为“采样器”的工具/插件。这可用于对内存或cpu进行采样。您可以定期拍摄快照并查找可能的泄漏。以下是有关如何使用它的一些详细信息-从

更有效的方法是获取堆转储(例如,当应用程序速度减慢时或何时)。VisualVM帮助您获取堆转储(使用监视器选项卡上的堆转储


此文件可由以下人员进行分析-有关详细信息,请参见

您是否尝试运行源代码?我发现这在识别可能导致内存泄漏的代码方面非常有效。感谢您的建议-但有两件事:(1)我一再被告知FindBugs对NullPointerException有好处,但对内存泄漏没有好处,而且,更重要的是,(2)我真的想熟悉jvisualvm,因此,除非它显然不是这项工作的正确工具,否则我很想看看它是如何被用作诊断工具的。再次感谢你的建议!一件小事:工具/插件/可用插件——安装Visual GC——该插件可以更好地显示堆内存和GC状态的图形。MAT也可以在没有VisualVM的情况下自行进行堆转储可能链接到此处的文章现在可以在