【问题标题】:JAVA: Read HashMap object Content from HeapdumpJAVA:从 Heapdump 读取 HashMap 对象内容
【发布时间】:2020-10-01 12:51:09
【问题描述】:
我需要更深入地分析 OOM,并且需要找出哪些对象导致 Oracle 的 T4CPreparedStatement JDBC 层内部的 OOM。因此,我正在寻找 HashMap (java.util.Hashtable$Entry[]) 中的内容。
- 这可能来自 HeapDump 吗?
- 这可以通过 JMX 连接实现吗?
我的 HeapDump(*.phd 文件)由 Websphere Application Server 在 OOM 期间自动创建。
PS:也许它可以在带有 IBM Extensions 的 Eclipse Memory Analyzer Tool 中完成,但如何?
【问题讨论】:
标签:
java
out-of-memory
heap-memory
jmx
【解决方案1】:
PHD 文件没有原始字段值或原始数组内容,因此您最多只能在 HashMap 中看到键和值的类型。
哈希映射集合查询将失败,并显示:“转储格式'DTFJ-PHD'不支持检查'哈希条目'。”
“按类显示对象”可能有助于查看持有哪些类型的东西:
班级名称 |对象 |浅堆
-------------------------------------------------- ----------------
java.util.HashMap | 1 | 40
|- java.lang.Class | 1 | 160
|- java.util.HashMap$Node[] | 1 | 136
| |- java.util.HashMap$Node | 10 | 240
| | |- sun.misc.URLClassPath$JarLoader | 9 | 504
| | |- java.lang.Class | 1 | 160
| | |- java.lang.String | 10 | 160
| | |- java.util.HashMap$Node | 4 | 96
| | |- sun.misc.URLClassPath$FileLoader| 1 | 24
| | '- 总计:5 个条目 | |
-------------------------------------------------- ----------------
你真的需要一个系统转储。