我怀疑我们的ActiveMQ连接桥有一个主要的内存泄漏 - 我们看到典型的内存泄漏模式(应用程序加载正常,如果长时间运行或在短时间内一遍又一遍地重新启动会减慢时间)。我查找了查找Java内存泄漏的现代最佳实践,许多开发人员似乎放弃了传统工具,如jhat / jmap,而不是新的(呃)jvisualvm
。
启动此工具(并花了几个小时阅读其教程)后,我可以为CPU和内存拍摄探查器快照。
我只是在这一点上陷入困境 - 如何分析这些快照来识别泄漏?关于如何使用jvisualvm生成快照的文档很多,但关于如何真正理解它们的文档很少。
提前致谢。
答案 0 :(得分:26)
使用visualvm分析内存泄漏并不容易。它有一个名为' sampler'的工具/插件。这可以用于采样内存或CPU。您可以定期拍摄快照并查找可能的泄漏。以下是有关如何使用它的一些详细信息 - 从quick search
获取更有效的方法是获取堆转储(例如,当应用程序放慢速度或OOM happens时)。 VisualVM帮助您进行heapdump(在监视器选项卡上使用堆转储)
此文件可由MAT进行分析 - 有些详细信息,请访问How do I analyze a .hprof file?和http://memoryanalyzer.blogspot.in/