教程:分析来自 Java 进程的概要分析数据

目标

通过下列方法使用“概要分析和记录”透视图的“概要分析和记录”视图来分析对 Java 进程进行概要分析时收集到的数据:

所需时间

一小时

准备工作

在开始本教程之前,需要完成下列任务:

  1. 安装 Eclipse 平台,包括 Hyades 工具。
  2. 准备好要导入的样本概要分析文件(hcframe.jar)。该文件应该位于以下目录中:
    Hyades_install_dir\eclipse\plugins\org.eclipse.hyades.collection.framework_3.3.0

描述

在本教程中,您将使用不同的“概要分析和记录”视图来分析样本 PerformanceExample.class。此样本打开一个包含两个按钮的框架。

您将完成下列任务:

  1. 在工作台中打开概要分析和记录透视图
  2. 对 PerformanceExample 类进行概要分析
  3. 分析概要分析信息

要在监视应用程序时更新视图,单击“刷新视图”按钮 具有样式化图标的按钮

在工作台中打开概要分析和记录透视图

窗口菜单中,单击打开透视图 > 其它 > 概要分析和记录

对 PerformanceExample 类进行概要分析

要对 PerformanceExample 类进行概要分析,请执行下列步骤:

  1. 单击概要分析下拉菜单 带有样式化图标的按钮 并选择概要分析。这就打开了“启动概要分析”对话框。
  2. 双击外部 Java 应用程序以创建新配置。
  3. 切换至主要选项卡。
  4. 类名字段中输入 org.eclipse.hyades.test.collection.framework.PerformanceExample
  5. 单击添加 Jar 以添加包含此类的 jar。
  6. 选择 Hyades_install_dir\eclipse\plugins\org.eclipse.hyades.collection.framework_3.3.0\hcframe.jar
  7. 单击打开。这就添加了 jar。
  8. 单击概要分析选项卡。可在此选项卡中指定概要分析条件。
  9. 单击概述选项卡。可在此选项卡中指定过滤器集和内容。
  10. 单击添加按钮以创建新的概要分析集。这就打开了“添加概要分析集”向导。
  11. 在“概要分析集”页面上,为此概要分析集指定名称,然后单击下一步
  12. 在“概要分析类型”页面上,展开标签为内存分析的节点,然后选择基本内存分析并选取它旁边的复选框。这将把与内存相关的信息添加至应从应用程序收集的信息类型列表
  13. 展开标记为时间分析的节点,选择执行时间分析并选择它旁边的复选框。在选择了此选项后,您就可以使用统计视图来分析与时间相关的信息。您需要收集执行图形详细信息才能够使用“执行流”和“方法调用”视图。由于此样本的目的是指导您使用所有概要分析视图(包括“执行流”视图和“方法调用”视图),所以,请选择显示执行流图形详细信息并且,单击复选框收集被过滤器集排除的边界类并将边界类深度设置为 1。单击下一步
  14. “过滤器集”页面使您能够指定要分析的一小组信息。如果要过滤掉不想分析的类或包,这种功能就会很有用。
    所选过滤器集的内容下面,单击添加以添加要为其收集数据的类或包。这就打开了“添加过滤器”对话框。
  15. 要对此包进行概要分析,输入 org.eclipse.hyades.test.collection.framework.* 作为
  16. 方法名指定为 * 以仅包括与此示例相关的方法。
  17. 单击确定。这样就将过滤条件添加到了内容列表中。
  18. 要从过滤器内容列表中排除其它现有的类,请在类的“规则”列下面单击包括并将它更改为排除
  19. 单击完成。新的概要分析集已被添加到可用概要分析集列表中,并且它已突出显示,表明它就是将要使用的概要分析集。
  20. 单击限制选项卡。此选项卡根据耗用时间或方法调用次数来控制收集的数据量。接受缺省值。
  21. 单击目标选项卡。ProfileProject 和“缺省监视器”是缺省概要分析资源,可以使用它们来存储来自此概要分析会话的数据。
  22. 单击概要分析
  23. 这样就创建了必需的概要分析资源,且代理程序和进程出现在“概要分析监视器”视图中。 
  24. 通过选择以下屏幕捕获中显示的分布式布局来允许查看监视器。这将允许您查看用于将数据集中在一起的监视器以及正在运行工作台的机器。

    概要分析监视器,它显示了资源层次结构和一个下拉菜单,该下拉菜单用于检查资源以使资源隐藏起来

分析概要分析信息

查看一个时间段的执行行为

可通过使用“执行流”视图来检查应用程序的执行。整个程序的执行显示在此视图中。它在垂直轴上显示时间。

  1. 在“概要分析监视器”视图中,选择监视器,然后单击鼠标右键并选择打开方式 > 执行流以打开“执行流”视图。这就打开了“执行流”视图。
  2. 要检查特定方法,单击方法名(或它下面的空格)以选择它。于是它调用的所有方法都会以黄色突出显示。突出显示区域的垂直长度指示了该方法的额定时间。额定时间的精确值显示在状态行中。

    显示了两个方法的“执行流”视图

    如果将光标移至视图中的任何对象上,窗口底部的状态栏就会显示详细信息。

  3. 使用放大工具 具有样式化图标的按钮 来启用光标,然后点击以放大某一区域。 

注意:要在监视应用程序时更新视图,单击刷新视图按钮 具有样式化图标的按钮

标识活动的线程

在“执行流”视图中,每个线程都包含许多活动周期,它们是由大量方法调用标识的。在符号表示法中,第一个调用的方法是一个条带,后续调用的方法作为其它条带出现在它的右边。方法调用序列从左向右进展;线程的活动部分就是由这个从左向右的进展标识的。

当选择描述整个方法调用的序列之后,执行该序列所花费的额定时间便显示在状态行中。要查看处于活动状态的线程的额定时间,请查找下列时间之间的区别:

  1. 指向所选黄色区域的顶部水平线以在状态行中显示相应的额定时间。
  2. 同样,指向所选黄色区域(此区域覆盖当方法序列处于活动状态时的执行周期)的下边缘,并查看在该点的额定时间。

技巧

标识频繁调用的方法

要标识频繁调用的方法:

  1. 使用“缩放”工具 具有样式化图标的按钮 来放大方法调用的序列。
  2. 查看所选区域内相同颜色的条带。这些条带标识同一个类实例中已多次调用的方法。
  3. 检查具有不同颜色的条带(其每个条带都表示一个方法)的长度。条带越长,执行该方法的时间越长。

测量垃圾回收

通常,不可能通过在此视图中检查用户线程中的条带来指出是否已对一个对象进行了垃圾回收。

请执行下列步骤:

  1. 缺省情况下,垃圾回收线程是隐藏的。通过在视图的上下文菜单下选择线程 > GC 来启动垃圾回收线程。
  2. 检查此视图中最左边的列。此列称为 GC 线程列,保留它以用于垃圾回收线程。
  3. 检查 GC 线程列中是否有一个细长的矩形。这个矩形很可能出现在具有最多方法调用的对象的正下方。每当已对一个对象进行垃圾回收时,此矩形便出现在 GC 线程列中。

标识程序执行的各个阶段

标识初始化阶段

  1. 使用“放大”工具 具有样式化图标的按钮 来放大主线程顶部的方法调用的序列。
  2. 注意标有 -init- 的方法。
  3. 单击以选择方法。将更新状态栏以指示该方法有助于进行初始化(为应用程序中使用的变量赋值)。

使用“方法调用”视图来分析方法

  1. 从“概要分析监视器”中,选择监视器或代理程序。单击鼠标右键,然后选择打开方式 > 执行流。将出现“执行流”视图。
  2. 在“执行流”表中,展开要检查的线程。选择要研究的方法,单击鼠标右键,然后选择显示方法调用
  3. 使用“放大”工具 具有样式化图标的按钮 以放大显示的部分。这些条带是根据类来进行颜色分类的,并由表示方法调用的水平线相连接。
  4. 通过单击方法的名称来选择方法。 
  5. 单击刷新视图按钮 具有样式化图标的按钮 以确保查看的是最新的信息。
  6. 注意以下行:
    状态行显示方法名和数字 1/1

    此行显示方法的名称,后面是格式 n/m,其中 n 是当前显示的调用数,m 是总调用数。
  7. 单击上一步 具有样式化图标的按钮下一步 具有样式化图标的按钮 来浏览所选方法的所有调用(或者所选对象的每条消息)。工具栏上的分数会更改为指示您正在查看的调用。

查找方法的调用者

要查找哪些对象在调用方法,请执行下列步骤,在“方法调用”视图中继续进行:

  1. 要查看方法的调用者,单击显示调用者按钮 具有样式化图标的按钮。方法即显示出来,且调用者显示在其左边。
  2. 要查看您所查看的每个新调用的方法的调用者的更多详细信息,将光标放在视图中表示该调用者的条带上。状态行显示调用者的信息。
  3. 要查看所选方法调用的方法,单击显示被调用的方法按钮 具有样式化图标的按钮。