【问题标题】:Find contents of key value pair in a jvm heap dump?在 jvm 堆转储中查找键值对的内容?
【发布时间】:2013-10-18 20:18:21
【问题描述】:

我正在使用内存分析器工具分析堆转储。从支配树中,我选择了保留内存最高的类(大约 47%)。选定的对象没有参考,我看到有一个哈希映射条目,保留内存超过 1GB。我看到这样的键值对

Class Name                                              | Shallow Heap | Retained Heap
---------------------------------------------------------------------------------------
key java.lang.String @ 0x717278cd8  MapAllProfilesOutput|           32 |            88
---------------------------------------------------------------------------------------

Class Name                                                   | Shallow Heap | Retained Heap
------------------------------------------------------------------------------------------------
value com.tibco.xml.xdata.xpath.Variable @                   |           24 | 1,194,483,312
|- <class> class com.tibco.xml.xdata.xpath.Variable          |           16 |         2,296
|- mValue com.tibco.xml.datamodel.nodes.Document             |           48 | 1,194,483,288
------------------------------------------------------------------------------------------------

有没有办法获取 value 的内容?我正在阅读一些关于使用 OQL 进行散列的地方,所以想检查一下可能性。我的堆转储也大约是 4.5 GB。

【问题讨论】:

  • 内容特别重要吗?它看起来相当简单。您将保留一些与 XPath 相关的变量,这些变量最终会保留整个内存中的文档。弄清楚如何在该地图中仅存储您关心的数据。
  • 我知道它是一个 xpath 变量,但我想知道值是什么,以便分析哪些值不需要存储

标签: java heap-dump


【解决方案1】:

我建议您考虑使用Eclipse Memory Analyzer。这为您提供了一个图形概览,您可以在其中轻松深入了解相关地图。也就是说,如果它真的是 1.2GB 大小……那就需要大量的钻取!

如果您真的想使用 OQL,那么 online help 是一个很好的资源。使用 OQL,如果您选择的值返回一个字符串,它将被打印出来,例如:

select file.path.toString() from java.io.File file

将打印转储中所有文件对象的路径。您可以使用它来打印文档的重要细节,这将有助于缩小您正在处理的文档的范围。

【讨论】:

  • 如果您没有注意到我在问题中提到正在使用 eclipse 内存分析器工具。这就是我所做的 Dominator tree --> 选择传出引用并从中选择几个级别向下钻取并在我看到键值对的位置。就像在 Value 中查看数据一样。我不确定是否需要进一步深入了解
  • @greenH0rn 实际上,我确实错过了您对 MAT 的引用,但是我的答案的第二部分应该对您仍然有用吗?
  • 是的,我想它会很有用。我还没试过,但会做和评论
  • @greenH0rn 你能弄清楚如何查看一些键值对的“值”数据吗?
猜你喜欢
  • 1970-01-01
  • 2011-05-06
  • 1970-01-01
  • 2010-12-04
  • 2020-05-01
  • 2018-01-10
  • 2011-01-31
  • 2022-10-19
  • 1970-01-01
相关资源
最近更新 更多