IBM HeapAnalyzer简介使用

IBM®HeapAnalyzer

 

创建者:Jinwoo Hwang(JinwooHwang.com

 

 

欢迎来到IBM HeapAnalyzer。IBM HeapAnalyzer允许您使用其获得专利的启发式搜索引擎查找可能的Java™堆泄漏,并分析Java堆转储。

 

介绍

Heapdump包含堆中所有对象的列表。此工具分析Java SDK 1.3.1,1.4.x,5.0,6.0和7.0的堆转储

IBM HeapAnalyzer“按原样”提供。

条件

· Java运行时环境7或更高(IBM Java运行时环境7或IBM Java系统转储分析更高)



如果使用Java虚拟机的旧版本下面将引发异常:

在线程异常“主” java.lang.NoClassDefFoundError:的java / UTIL /正则表达式/ PatternSyntaxException

· 用于大型Java堆转储的64位Java运行时环境,如果需要超过4GB的内存

定义

· 根对象一个没有(不同)对象持有引用的对象。

· 父对象的对象(例如,A),其保持至少一个参考一些 (不同的)对象(例如,B)。在这种情况下,A被认为是B的父亲。 

· 所有者对象如果一个对象有多个父对象,则选择一个父对象作为所有者对象。 总大小仅用所有者对象计算。 

· 子对象至少有一个(不同的)对象 (例如A)拥有引用的对象(例如B)。在这种情况下,B被认为是A的孩子。 

· 键入相同对象的集合

· 大小对象的大小是在内存中保存该对象所需的内存量。

· 总大小一个对象的子树大小是它的大小和 从其子节点到达的所有对象大小的总和。请注意,每个 对象在处理期间都被分配了一个唯一的父代和根。 如果 家长和孩子的总体积存在显着差异,则称为总体规模下降。 

· 泄漏大小泄漏嫌疑人的总大小。如果泄漏嫌疑人包含另一名泄漏嫌疑人,泄漏大小将被嵌套泄漏嫌疑人的总大小减去

特征

· 从表视图和树视图的父视图和子视图

· 地址搜索

· 根列表视图

· 同类型查看

· 配置恢复并保存

· IBM,Solaris®和HP-UX®Java ascii /二进制Java堆转储支持

· IBM Java系统转储支持:IBM的Java 7或更高版本需要处理的最新IBM Java系统转储文件格式

· 外观和感觉选项

· 自动检测截断的堆转储

· Java Profile v1.0.1 ascii和二进制Java堆转储支持

· Solaris hprof 1.0.1二进制Java堆转储支持

· heapdump文件命令行支持。请参阅“如何运行此工具”部分

· 支持IBM便携式堆转储.phd格式以及IBM堆转储.txt和.txt.gz

· 自动检测文件格式

· 支持控制台窗口

· 从heapdump创建一棵树

· 计算每个对象的大小

· 计算每个子树的总大小

· 查找子树中的总大小下降

· 按大小显示对象之间的差距

· 按大小显示对象

· 按总大小显示对象

· 通过孩子的数量显示对象

· 按大小显示类型

· 按计数/频率显示类型

· 显示类型的字母顺序

· 显示差距分布图

· 显示对象的详细信息

· 用正则表达式查找类型

· 在输入字段,树和文本中拖放支持

· 树形导航中的书签

·找到 可能的泄漏嫌疑人

图标

IBM HeapAnalyzer简介使用

IBM HeapAnalyzer简介使用实例

IBM HeapAnalyzer简介使用数组

如何运行这个工具

您需要使用Java 2 Platform Standard Edition 6或更高版本的Java运行时环境(JRE)来运行此工具。

用法<Java路径> java -Xmx [heapsize] -jar ha <HeapAnalyzer版本> .jar <heapdump文件>

例如,/ usr / java60 / bin / java -Xmx1000m -jar ha146.jar heapdump1234.txt

如果在处理堆转储时存在java.lang.OutOfMemoryError,请尝试增加最大堆大小(-Xmx)值,以便JVM获得更多内存。如果你是从Windows PC运行的,这里是一个批处理(.bat)文件(由James Stroud编写),可以帮助你运行这个文件,帮助你在你的PC上选择特定版本的Java。这是为了您的PC上安装了多个版本的Java的情况下,典型情况下。请注意,您需要修改bat文件中的目录路径,作为bat文件中的注释说明。下载批处理文件

由于性能问题,最大堆大小不应大于此工具可用物理内存大小的大小。

1.启动HeapAnalyzer

IBM HeapAnalyzer简介使用

 

[初始画面]

 

2.选择文件 - >打开并选择一个堆转储文件

 

IBM HeapAnalyzer简介使用

 

选择IBM堆转储文本文件,IBM便携式堆转储,Java Profile V1.0.1 ascii / binary Heap Dump或HeapAnalyzer处理文件以处理堆转储。

3.在处理堆转储期间显示进度。

IBM HeapAnalyzer简介使用

 

 

4.如果您正在处理大型堆转储,则需要很长时间。以下是处理完成时的屏幕。请不要关闭这个窗口,直到你不需要这个heapdump。

 

IBM HeapAnalyzer简介使用

 

 

内存泄漏嫌疑人在树视图的“传票泄漏嫌疑人”菜单下编译。

 

 

如果没有内存泄漏嫌疑,树视图默认情况下不显示。

 

IBM HeapAnalyzer简介使用

 

点击Analysis菜单并选择Tree view菜单项来显示堆树。

 

IBM HeapAnalyzer简介使用

 

5.以下是heapdump的树视图。

图标,IBM HeapAnalyzer简介使用表示它已经被包含在树形视图中作为所有者对象的子对象

每个树节点的格式如下所示:

TotalSize(TotalSize / HeapSize%)[ObjectSize] NumberOfChildObject(根对象数)Name地址

 

IBM HeapAnalyzer简介使用

 

 

 

6.在树形视图中,您可以看到节点的详细信息,您可以搜索父节点和子节点之间的总大小降落

或者您可以通过选择一个节点并单击鼠标右键来查找地址。

 

IBM HeapAnalyzer简介使用

 

“搜索总大小下降”会发现父母的总大小之间的大小下降

和父母孩子的最大总规模。

如果从“搜索总大小下降”菜单中找不到任何大小的下拉菜单,则需要减少

选项中搜索的最小总大小下降。

 

 

 

您可以通过选择菜单“查找地址”在树形视图中查找地址

 

IBM HeapAnalyzer简介使用

 

以下是地址搜索的结果:

 

IBM HeapAnalyzer简介使用

 

 

7.如果要查看关于节点的详细信息,只需单击,您将在右窗格中获得有关信息。或者您可以选择以下菜单。

 

IBM HeapAnalyzer简介使用

 

以下是heapdump树中详细节点信息的屏幕

 

IBM HeapAnalyzer简介使用

 

 

8.您可以通过选择“添加书签”来放置书签来保存位置并继续导航树。

 

IBM HeapAnalyzer简介使用

 

 

书签存储在“树状视图”菜单栏的“转到书签”菜单中。

你可以通过点击书签去树中保存的位置

 

IBM HeapAnalyzer简介使用

 

 

通过点击“删除书签”菜单中的书签可以删除书签。

 

IBM HeapAnalyzer简介使用

 

 

9.如果树上有很多孩子,可以在树的底部看到“NNNN more children”。

通过展开节点可以看到更多的孩子。

 

IBM HeapAnalyzer简介使用

 

 

您也可以使用父节点中的“显示更多的孩子”菜单。

 

IBM HeapAnalyzer简介使用

 

现在你可以看到更多的孩子。

 

IBM HeapAnalyzer简介使用

 

 

10.您可以使用“查找泄漏嫌疑人”菜单找到可能的泄漏区域。

 

IBM HeapAnalyzer简介使用

 

怀疑泄漏区域显示如下。

 

IBM HeapAnalyzer简介使用

 

 

 

 

图标“,IBM HeapAnalyzer简介使用”表示它不是根对象/类,并且此节点有父项。

如果你想显示更多的父母,你可以选择菜单“显示更多的父母”

如果你想从根对象显示,你可以选择菜单“显示从根”

 

IBM HeapAnalyzer简介使用

 

 

如果要查看所有名称相同的对象,请从菜单中选择“列出相同类型”:

 

IBM HeapAnalyzer简介使用

 

以下是查询的结果:

 

IBM HeapAnalyzer简介使用

 

通过点击鼠标右键,你可以在树形视图中找到一个特定的对象,你可以找到一个特定对象的父母或孩子。

 

IBM HeapAnalyzer简介使用

 

11.显示按总尺寸排序的对象。

 

IBM HeapAnalyzer简介使用

 

 

对象按总大小进行显示和排序。

 

IBM HeapAnalyzer简介使用

 

通过点击鼠标右键,你可以在树形视图中找到一个特定的对象,你可以找到一个特定对象的父母和孩子。

 

IBM HeapAnalyzer简介使用

 

如果您单击TotalSize的列标题,该列将按相反顺序排序。

 

 

IBM HeapAnalyzer简介使用

 

12.列出按大小排序的对象

 

对象按大小排序,方法是单击“大小”列标题。

 

 

IBM HeapAnalyzer简介使用

 

13.列出按子项数排序的对象

 

对象通过点击“否”子列标题按子项数进行排序。

 

IBM HeapAnalyzer简介使用

 

点击地址栏标题按地址顺序排序对象。

 

IBM HeapAnalyzer简介使用

 

单击对象列标题按字母顺序对对象进行排序。

 

IBM HeapAnalyzer简介使用

 

 

您也可以将每列移动到不同的位置。Address列在下面的屏幕中移到了TotalSize列的旁边。

 

IBM HeapAnalyzer简介使用

 

14.按大小排序的列表类型

 

IBM HeapAnalyzer简介使用

 

 

类型按大小的总和排序。

 

IBM HeapAnalyzer简介使用

 

通过单击鼠标右键,可以找到具有特定对象的相同名称的对象。

 

IBM HeapAnalyzer简介使用

 

 

15.按频率/计数排序的列表类型

 

IBM HeapAnalyzer简介使用

 

 

16.按字母顺序排列的列表类型

 

IBM HeapAnalyzer简介使用

 

选择根目录来显示根对象。

 

IBM HeapAnalyzer简介使用

 

所有的根对象显示如下:

 

IBM HeapAnalyzer简介使用

 

 

通过点击鼠标右键,你可以在树形视图中找到一个特定的对象,你可以找到一个特定对象的相同类型,父母和孩子。

 

 

IBM HeapAnalyzer简介使用

 

16.列出按大小排序的对象之间的间隔

 

IBM HeapAnalyzer简介使用

 

 

以下是按大小查看对象之间的差距

 

IBM HeapAnalyzer简介使用

 

 

17.显示差距统计。

 

IBM HeapAnalyzer简介使用

 

 

差距分布图。不要认为差距是*空间。差距实际上是两个对象之间的差距。Java堆转储没有任何有关它们的信息。

 

IBM HeapAnalyzer简介使用

 

18.您可以通过选择查看 - >选项菜单来配置设置

 

IBM HeapAnalyzer简介使用

 

 

 

IBM HeapAnalyzer简介使用

 

 

19.搜索对象/类型并按总大小进行排序。

 

IBM HeapAnalyzer简介使用

 

 

在正则表达式中输入对象/类型名称。大写/小写事项!

 

IBM HeapAnalyzer简介使用

 

以下是名称中包含“字节”的类型列表。

 

IBM HeapAnalyzer简介使用

 

 

20.搜索对象/类型并按大小排序。

 

IBM HeapAnalyzer简介使用

 

 

以下是名称中有“字节”的类型列表,按照子项的数量排序。

 

IBM HeapAnalyzer简介使用

 

通过点击鼠标右键,你可以在树形视图中找到一个特定的对象,你可以找到一个特定对象的相同类型,父母和孩子。

 

IBM HeapAnalyzer简介使用

 

通过输入确切的名称,我们可以查看有关特定类型的详细信息。

例如,您可以输入一个类型的确切名称:byte []

 

IBM HeapAnalyzer简介使用

 

 

以下是byte []类型的列表以及有关byte []的详细信息

列标题包含更多信息。

TotalSize的总和是117,712字节。总和的大小是117,712字节。

有140个字节的对象[]

 

IBM HeapAnalyzer简介使用

 

您可以通过选择搜索地址找到一个特定的地址

 

IBM HeapAnalyzer简介使用

 

输入一个对象的地址

 

IBM HeapAnalyzer简介使用

 

以下是地址搜索的结果

 

IBM HeapAnalyzer简介使用

 

通过点击鼠标右键,你可以在树形视图中找到一个特定的对象,你可以找到一个特定对象的相同类型,父母和孩子。

 

IBM HeapAnalyzer简介使用

 

22.你可以隐藏/显示状态栏。

 

IBM HeapAnalyzer简介使用

 

 

23.你可以隐藏/显示控制台。

 

IBM HeapAnalyzer简介使用

 

来自HeapAnalyzer的异常/错误

 

· OutOfMemoryError 



将-Xmx增加到您的环境的最大可用大小。如果您在32位Java虚拟机上达到32位地址空间限制,则建议对大型Java堆转储使用64位Java虚拟机。在大多数情况下,对于Windows®操作系统上的32位Java虚拟机上的-Xmx,大小约为1500MB。例如,您可能希望将64位Java虚拟机用于文件大小为500MB的PHD Java堆转储。

· 线程“main”中的异常java.lang.NoClassDefFoundError:java / util / regex / PatternSyntaxException 



HeapAnalyzer需要Java虚拟机版本5或更高版本。

如果使用较早版本的Java虚拟机,则会引发异常:

· java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:0 

在java.lang.String.charAt(未知源)

在com.ibm.jinwoo.heap.FileTask $ ActualTask​​。<init>(FileTask.java:386)

at com.ibm.jinwoo.heap.FileTask $ 1.construct(FileTask.java:794)

at com.ibm.jinwoo.heap.SwingWorker $ 2.run(SwingWorker.java:45)

at java.lang.Thread.run(Unknown Source )

处理损坏的heapdump或截断的内容时,您可以看到此异常。截断或损坏的heapdump不可靠。

· 异常在解析线9:0x0x50003070 [1000]的java /郎/字符串

了java.lang.RuntimeException 

在com.ibm.jinwoo.heap.FileTask $ ActualTask <初始化>(FileTask.java:321)。

在com.ibm.jinwoo .heap.FileTask $ 1.construct(FileTask.java:794)

at com.ibm.jinwoo.heap.SwingWorker $ 2.run(SwingWorker.java:45)

at java.lang.Thread.run(Unknown Source)



一些旧的IBM SDK在堆转储中生成无效的地址。用0x替换0x0x后,HeapAnalyzer可以处理堆转储。

· 解析第10行时出现格式错误:0x50004050 0x50004050 heapdump中的



意外格式。可能是已损坏的heapdump。进一步的分析是不可靠的。

 

文章来源:https://www.ibm.com/developerworks/community/wikis/home?lang=en#!/wiki/W3b463571efc8_4f02_99af_3cbc0da42ddc/page/IBM%20HeapAnalyzer%20Information