首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

用于 PowerPC 上的 Linux 的五个易用的性能分析工具(6)

用于 PowerPC 上的 Linux 的五个易用的性能分析工具(6)

Heap dumpheap dump 工具提供关于在 Java 堆中找到的对象的统计数据,包括每个类的对象数目,分配给每个类的对象的字节数,以及每个类的对象的平均大小(字节数)。另外的统计数据包括 Java 堆的总的大小,以及 Java 堆的起始和结束地址。heap dump 工具可以与 IBM 的 32 位和 64 位 Runtime Environment for Linux v1.4.0 或更新的版本一起使用,应该也可以与其他非 IBM JVM 一起使用,因为它使用的是标准的 JVM Profiler Interface(JVMPI)事件。
类似于 JLM,heap dump 也是 Java 剖析器所提供的一个专门功能。rtdriver 应用程序是 Java 剖析器的一个接口。通过rtdriver 接口,在任何时刻都可以请求生成 heap dump 报告。可以在 /piperf/bin 目录中找到 rtdriver 应用程序和在 PowerPC 上被实现为 libjprof.so 的 Java 剖析器。
如何运行 heap dump?
  • 需要运行您的 Java 程序。需要使用 Xrunjprof:socket,classloadinfo 标记来启动 Java 剖析器。例如,如果您的 Java 类被命名为 MyJava,那么运行下面的命令:           
    1
    # java –Xrunjprof:socket,classloadinfo MyJava




  • 运行 rtdriver 应用程序(传递给下面的命令的 -l 标记是小写字母 l,不是数字 1):           
    1
    # rtdriver –l




  • 当 rtdriver 应用程序连接到本地主机后,它将显示一个 Command> 提示符。您可以在任何时刻请求一个关于当前 Java 堆使用情况的报告。在同一个 rtdriver 会话中您也可以生成多个报告。每个 heap dump 报告实际上包括一组两个文件,存储在当前工作目录中,名为 log_hd.#_pppp 和log.hdcnm.#_pppp,其中           # 是报告的序列号,从 1 开始是第一个报告,然后接下来每个报告增 1,          pppp 指的是进程的 id。在 Command> 提示符中输入下面的命令来生成一个报告:           
    1
    Command> heapdump=1




  • 要退出 rtdriver,在 Command> 提示符中输入下面的命令:           
    1
    Command> quit




如何解读 heap dump 报告?heap dump 报告包括两个文件,一个 log-hd 文件和一个 log-hdcnm 文件。首先查看 log-hd 文件。其内容类似如下:         
1
2
3
4
5
6
7
# HEAPDUMP
# level             1
# begin             0x8004ea3090
# end               0x8004ed11db
# num_traces        5
# traces            0x7fe05e0cc0
# HEAPDUMP SIZE  =  188747




HEAPDUMP SIZE 标签指明的是 Java 堆的总的大小,在本例中是 188747 个字节,以 10 进制格式给出。Java 堆的范围是从“begin”标签指明的内存地址到“end”标签指明的内存地址。在本例中,堆的范围是从 0x8004ea3090 到 0x8004ed11db。
现在来查看 log-hdcnm 文件。这里是一段摘录:         
1
2
3
4
5
6
7
8
9
MaxObjectSize : 19088
   
OBJS    BYTES     AVER      %
4765 -539437512 -113208.0  100.0
OBJS    BYTES     AVER     %    CLASS
====    =====    =====  =====   =====
1331   128512     96.0   -0.0   CHAR[]
  24    42160   1756.0   -0.0   BYTE[]
1115    35680     32.0   -0.0   java/lang/String




首先您将会看到 MaxObjectSize 域,它指的是在 Java 堆中找到的最大对象的大小(单位是字节)。然后是描述在 Java 堆中找到的所有对象的统计数据。首先给出堆中所有对象的一个总结,然后分别是各个类的统计数据。例如,考虑 CHAR[] 类。在堆中有 CHAR[] 类的 1331 个对象。分配给那些 CHAR[] 对象的总的字节数是 128512,平均到每个 CHAR[] 对象是 96 个字节。% 栏中的数字指明了 CHAR[] 对象正在使用的空间占总的 Java 堆空间的百分比。其他每个类的统计数据也可以以同样的方式进行解读。
返回列表