我怀疑我们的 ActiveMQ 连接桥中存在严重的内存泄漏 - 我们看到了典型的内存泄漏模式(应用加载正常,如果长时间运行或在短时间内反复重新启动会变慢时间)。我查找了查找 Java 内存泄漏的现代最佳实践,许多开发人员似乎正在放弃像 jhat/jmap 这样的传统工具来代替新的(er)jvisualvm
。
启动此工具后(并花几个小时阅读其教程),我能够为 CPU 和内存拍摄分析器快照。
我只是在这一点上卡住了 - 我如何分析这些快照以识别泄漏?关于如何使用 jvisualvm 生成快照的文档很多,但关于如何真正理解它们的文档却很少。
提前致谢。
最佳答案
使用 visualvm 分析内存泄漏并不容易。它有一个名为“sampler”的工具/插件。这可用于对内存或 cpu 进行采样。您可以定期拍摄快照并查找可能的泄漏。以下是有关如何使用它的一些详细信息- 来自 quick search
更有效的方法是获取堆转储(比如当应用程序变慢或 OOM happens 时)。 VisualVM 帮助您进行 heapdump(在 Monitor 选项卡上使用 Heap Dump)
这个文件可以被 MAT 分析- 一些细节在这里How do I analyze a .hprof file?
关于java - 如何使用 visualvm 查找内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9154785/