使用visualvm和MAT进行Java堆内存分析

时间:2015-07-21 11:10:01

标签: java eclipse heap-memory visualvm heap-dump

我有一个正在运行的应用程序,最近发现我的容器没有响应,行为方式与未编写的日志不同......等等...

所以我想到了收集堆转储和分析正在发生的事情。

我选择了VisualVM和MAT。分析时我现在感到困惑。

请查看下面的图片,如果我有所了解,会很棒。

MAT显示报告正常,但堆大小更多。我们是否需要考虑浅堆大小的崩溃。找不到关于shallo堆的更多信息。

Visualvm显示完整的记忆。

VisualVM的

enter image description here

MAT with unreachable_objects

enter image description here

MAT HISTOGRAM

enter image description here

2 个答案:

答案 0 :(得分:0)

除非存在大量的并发SSL连接,否则我不希望SSL引擎类占用这么多内存。那里有些可疑的东西。

您的选择:

  1. 尝试另一个(较新的)JVM(可能是内存泄漏)
  2. 检查打开的连接/调整连接池参数以断开陈旧连接
  3. 进一步调查这些课程(SSLEngineResult,SSLEngineArgs)
  4. 如果您需要更多帮助,请务必添加有关应用程序所看到的加载类型,您正在使用的容器以及JVM版本的信息。

答案 1 :(得分:0)

“泄漏嫌疑人”是否显示任何内容?如果不是,您想要找到创建所有SSLEngineResult个对象的位置以及为什么它们仍然可以访问 - “GC Roots的路径”应该这样做。实际上很少有选项:只有很多并发连接打开,你可以在单例/静态类字段或ThreadLocal中引用它们。