练习 1.3:识别线程瓶颈

在开始之前,必须完成练习 1.2:收集线程数据

使用“线程视图”查找线程瓶颈

“线程视图”显示应用程序中所有线程的状态,并明确指出线程死锁和争用。

要查找瓶颈:

  1. 在“概要分析监视器”中,右键单击“概要分析”资源,然后单击打开方式 > 线程视图。打开“线程视图”。它类似于:

    显示此概要分析运行结果的“线程视图”屏幕快照,如下面文本中所述。

    我们感兴趣的是线程之间的垂直箭头。箭头指出一个线程(箭头开始的线程)正在等待另一线程(箭头指向的线程)释放锁定。双箭头指出两个线程处于死锁状态,都在等待对方释放锁定

  2. 箭头相互之间离得太近,不容易区分。要更清晰地查看,请单击“切换至压缩的时间标度”按钮 ,从缺省的线性时间标度切换至加权时间标度。 “压缩的时间标度”压缩了没有发生重要线程操作的时间段。显示更改为类似于:

    显示时间标度更改为“已压缩”后箭头分布的屏幕快照。

  3. 该“线程视图”的解释如下:

    在程序启动后不久,将一个接一个地创建四个 philo* 线程。每个线程都运行较短时间,然后发出锁定请求。请求不成功。当前三个锁定请求失败时,这些线程将进入等待锁定状态。当第四个线程的锁定请求失败时,就出现死锁,并且显示指示所有四个线程都处于死锁状态。

    philo* 线程正在等待来自其它 philo* 的锁定,后者也正在等待锁定。 在这种情况下,就进入了死锁:程序进入了不能继续的僵局。
    注意:通过将光标停留在特定线程段上,可以看到有关锁定请求、死锁和其它状态的特定信息。例如,这将显示一个工具提示,指定锁定的名称并指出占有该锁定的线程(“锁定线程”)。

  4. 您还可以在“属性”视图中查看有关线程段的详细信息。要显示此视图,请选择窗口 > 显示视图 > 属性。 选择线程段以显示其属性。

既然您了解发生此死锁的原因,就可以开始练习 1.4:解决线程瓶颈了。

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