入门:线程瓶颈检测

诸如争用和死锁这样的线程瓶颈会降低应用程序运行的速度,或者会使应用程序停止。“概要分析和记录”透视图包含可以帮助您检测和解决这些线程问题的视图和工具。

可以使用下列视图来检测线程瓶颈:

当进行检测线程瓶颈的工作时,通常在概要分析监视器视图中选择概要分析资源。

还可以使用在 Probekit 中设计的定制探针来调查线程瓶颈。

收集用于检测线程瓶颈的数据

可以使用“线程分析”概要分析集来收集有关应用程序中的线程瓶颈的数据。

先决条件:

要收集数据:
  1. 单击运行 > 概要分析
  2. 在“概要分析”对话框的“概要分析”页面上,选择线程分析概要分析集。
  3. 单击概要分析以启动您的应用程序。
  4. 执行应用程序中您认为存在线程瓶颈的那些部分。系统会在“线程分析”概要分析资源中收集和记录线程数据,然后将它显示在“概要分析导航器”中。现在可以停止应用程序了。

使用“线程视图”、“调用堆栈视图”和“UML2 时序图”视图检测线程瓶颈

在“线程视图”中,可以查看应用程序中所有线程的线程执行历史记录,以及死锁和争用情况的明确指示。在“调用堆栈视图”中,可以查看所选概要分析资源的所有线程的堆栈帧。在“UML2 对象交互”视图中,可以查看概要分析运行期间的调用顺序。

要检测线程瓶颈:
  1. 显示“线程视图”:右键单击已收集的数据的概要分析资源,并从弹出菜单中选择打开方式 > 线程视图
  2. 在“线程视图”中查找线程之间的垂直箭头。垂直箭头从正在请求锁定的线程指向占有该锁定的线程。单个箭头表示线程争用,即,一个线程正在等待另一个线程释放锁定。多个箭头表示死锁,其中两个线程处于同一死锁线程状态。
  3. 确定发生瓶颈时所调用的方法。 要确定方法,请执行下列步骤:
    1. 找到线程正在等待的锁定的名称。在“线程视图”中,将光标停留在正在等待锁定的线程上。 工具提示中将显示锁定的名称以及正占有该锁定的锁定线程的名称。
    2. 通过右键单击“概要分析监视器”视图中的“线程分析”概要分析资源,然后单击打开方式 > UML2 对象交互 “UML2 对象交互”视图将显示 Java 类实例之间的方法调用。
    3. 在“线程视图”中,将“当前时间”指示符放置在表示想要调查的请求的箭头上。这将使“UML2 对象交互”视图以及“调用堆栈视图”中的“调用堆栈”概要分析资源同步。 缺省情况下,“当前时间”指示符位于“线程视图”图的左边缘。要移动此指示符,可将它拖动到新位置或者单击“线程视图”中的时间标尺。
  4. 显示造成占有锁定的源代码(如果提供了的话)。为此,执行下列操作:
    1. 单击“线程视图”的标题栏中的下拉菜单,然后单击打开调用堆栈视图
    2. 右键单击占有锁定的线程的调用堆栈中的最新调用,然后单击弹出菜单中的打开源代码 仅当您正在对当前在 Java 透视图中打开的 Java™ 项目进行概要分析时,源代码才可用。现在可以更改代码以解决瓶颈了。
  5. 再次对应用程序进行概要分析以验证您已经解决了瓶颈。

有关更多信息,请阅读检测线程瓶颈

使用“执行流”视图和“执行流表”视图

在这些视图中,可以查看“线程视图”所基于的不同格式的原始数据。

要使用这些视图:
  1. 要显示“执行流”视图或“执行流表”视图,请选择窗口 > 显示视图 > 其它;展开“显示视图”对话框中的概要分析和记录条目,并选择您想要显示的视图。
  2. 在“执行流”和“执行流表”视图中,可以通过从弹出菜单中选择补偿的时间来减去进行概要分析所花的时间。

反馈
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.