入门:线程瓶颈检测

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

以下视图可用于检测线程瓶颈:

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

父主题:确定运行时问题入门

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

先决条件:

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

使用“线程视图”和“UML2 序列图”视图进行线程瓶颈探测

“线程视图”显示应用程序中所有线程的线程执行历史记录,并明确指出死锁和争用情况。“UML2 对象交互”视图显示概要分析运行期间的调用序列。

要检测线程瓶颈:
  1. 显示“线程视图”:右键单击已收集的数据的概要分析资源,并从弹出菜单中选择打开方式 > 线程视图
  2. 在“线程视图”中,查找线程间的垂直箭头 指示锁定请求的箭头。该箭头从正在请求锁的线程指向保留该锁的线程。单个箭头表示线程争用:一个线程正在等待另一个线程释放锁。多个箭头表示死锁(如果它们显示环状锁请求模式),在死锁情况中各线程互相阻止对方运行,因为它们在互相等待对方释放锁。
  3. 识别在发生瓶颈时调用的方法。 要识别方法,请执行以下步骤:
    1. 找到该线程正在等待的锁的名称。在“线程视图”中,将光标悬停在正等待该锁的线程位置。将在工具提示中显示锁的名称以及正保留该锁的锁定线程的名称。
    2. 右键单击“线程分析”概要分析资源,并从弹出菜单中选择打开方式 > UML2 对象交互
    3. 在线程的“线程视图”列表中,选择正保留您希望调查的锁的线程。“UML2 对象交互”视图显示选定线程的对象交互,包括锁和锁的请求。
    4. 将“当前时间”指示符放置在您希望调查的请求的箭头上方。这将同步“UML2 对象交互”视图以及“概要分析监视器”中的“调用堆栈”概要分析资源。缺省情况下将“当前时间”指示器放置在“线程视图”图的左边缘。要移动它,请使用鼠标“抓取”它。
  4. 显示负责保留该锁的源代码(如果可用)。要完成该操作,请右键单击保留该锁的线程调用堆栈中的最近调用,然后从弹出菜单中选择打开源代码仅当您正在对当前在 Java 透视图中打开的 Java™ 项目进行概要分析时,源代码才可用。现在可以在您的代码进行更改,以解决该瓶颈。
  5. 再次对您的应用程序进行概要分析以验证您已解决该瓶颈。

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

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

这些视图用不同格式显示“线程视图”所基于的原始数据。

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

使用条款 | 反馈
(C) Copyright IBM Corporation 2000, 2004. All Rights Reserved.