有没有办法从正在运行的JVM中获得类似“Dominator Tree”的功能?

时间:2015-08-06 16:14:01

标签: jvm heap-dump eclipse-memory-analyzer

最近,我一直在使用Eclipse MAT深入研究JVM堆转储。我喜欢它,但我似乎最常用的一个功能是Dominator Tree。 Eclipse的示例屏幕截图:

Eclipse Dominator Tree Sample Screenshot

无论如何,我发现很多时候,我通常只是看着那张桌子并得到前几个条目就能获得最大价值。由于获得这个的周转时间是:

  1. 创建堆转储(.ui-jqgrid .ui-jqgrid-labels .ui-th-column div { text-overflow: ellipsis }
  2. 下载/将heapdump拉到某个位置(我们的服务器上没有安装MAT)
  3. 运行Eclipse MAT的jcmd <pid> GC.heap_dump工具来构建各种树
  4. 打开MAT,点击支配树图标。
  5. 分析
  6. 有没有办法以编程方式从运行 JVM中获取此等效信息?我想在主机上运行某种ParseHeapDump.sh脚本并从JVM获取Top X Objects,但我不知道从哪里开始。

1 个答案:

答案 0 :(得分:1)

如果通过“ 正在运行 jvm ”你的意思是 - “获取信息而不进行停止世界堆转储

另一方面 - 如果您可以抓住堆转储(在任何具有适当节点冗余的生产系统上应该没问题,专为处理不可避免的Sun-JVM而设计停止世界GC暂停,然后Jhat,MAT-api,YourKit和Jol可能是你最好的朋友:

值得注意的是,当前存在的堆转储格式会丢失有关对象实际大小的信息,因此所有工具(MAT /等)只是尝试 GUESS 它正确:

HTH:)