提问者:小点点

Java堆内存分析与Visualvm和MAT


我有一个正在运行的应用程序,最近注意到我的容器没有响应并且行为不同,就像没有写入日志等…

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

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

请找到下面的图片,如果我有一些想法,那就太好了。

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

Visualvm显示完整的内存。

VISUALVM

垫unreachable_objects

垫型造影


共2个答案

匿名用户

除非有大量的并发SSL连接,否则我不会期望SSL引擎类占用这么多内存。那里发生了一些可疑的事情。

您的选择:

  1. 尝试另一个(较新的)JVM(可能是内存泄漏)
  2. 检查打开的连接/调整连接池参数以删除陈旧的连接
  3. 进一步调查这些类(SSLEngineResult、SSLEngineArgs)

如果您需要更多帮助,请务必添加有关应用程序看到的负载类型、您使用的容器以及JVM版本的信息。

匿名用户

“泄漏嫌疑人”显示了什么吗?如果你不想找到你在哪里创建所有这些SSLEngineResult对象以及为什么它们仍然可以访问——“通往GC根的路径”应该做到这一点。选项真的很少:只是打开了这么多并发连接,你在单例/静态类字段或ThreadLocal中引用了它们。