练习 1.2:收集线程数据
在开始之前,必须已完成练习 1.1:导入必需的资源。
场景:您要调查的程序正简要运行,然后突然停止。每次运行此程序都发生此问题。
此现象是典型的线程死锁,所以要求您调查此程序中的线程是如何交互的。
要找到可能的线程死锁,首先收集线程数据。然后使用“概要分析与记录日志”透视图中的“线程视图”分析数据。
收集线程数据将允许您识别死锁,或找出导致应用程序失败的线程。
准备收集线程数据
要收集线程数据,您必须在“概要分析与记录日志”透视图中。要切换至此透视图:
- 从 Software Development Platform 菜单栏中,选择窗口 > 打开透视图 > 其它...,打开“选择透视图”对话框。
- 在对话框的左下部,单击显示所有。
复选框会出现一个选中标记。
- 从透视图列表中,选择概要分析与记录日志并单击确定。
- 如果打开了“确认启用”对话框,单击总是启用功能,不要再次询问,然后单击确定。
- Software Development Platform 切换至“概要分析与记录日志”透视图。
收集 philosopher 应用程序的线程数据
要收集数据:
- 从 Software Development Platform 菜单栏,选择窗口 > 显示视图 > 控制台来打开“控制台”视图。“控制台”视图允许您在应用程序处理时跟踪它。
- 创建概要分析配置:
- 从菜单栏中,选择运行 > 概要分析...。打开“概要分析”对话框。
- 在“配置”列表中,双击 Java 应用程序条目。将显示 New_configuration 条目。
- 在“名称”字段中,输入 PhilosopherThreads。
- 在“主要”选项卡中,如果还没有在“项目”字段中输入 philosopher,则执行以下步骤:
- 在“项目”字段的旁边,单击浏览。打开“项目选择”对话框。
- 选择 philosopher,然后单击确定。
- 在“主要类”字段的旁边,单击搜索。
- 在“选择主要类型”对话框中,选择 MaitreDHote,然后单击确定。
- 如果正在使用 IBM Java 虚拟机(JVM),则执行以下步骤:
- 在“概要分析”对话框中,单击“实参”选项卡。
- 在 VM 实参下,输入 -Xj9 指定正确的 JVM 版本。
- 在“概要分析”对话框中,单击“概要分析”选项卡。
- 在“概述”子选项卡中,选中“线程分析”概要分析集的复选框。(概要分析集定义要为运行收集的概要分析数据的类型。)
- 单击概要分析。运行应用程序并显示更改如下:
- “概要分析”资源显示在“概要分析监视器”中。
- “控制台”视图显示运行的输出。
注意:如果收到了代理控制器不可用的安全性消息,请阅读如果不能收集数据。
当应用程序达到特定点时,停止处理。输出类似于:
. . .
philo#3:正在等待正确的 fork#3
philo#2:正在等待正确的 fork#2
philo#1:正在等待正确的 fork#1
philo#0:正在等待正确的 fork#0
HeadWaiter:所有 philosopher 均已锁定 6 次。退出应用程序。
这是程序停止的地方。然而对于此运行,您已收集线程数据,并且现在可以分析停止的原因。
如果不能收集数据
在可以收集任何种类的概要分析数据之前,必须正在运行代理控制器。
如果收到了代理控制器不可用的消息,请确保代理控制器已安装,手动启动它并再次尝试。有关指示信息,请参阅安装指南。您可以使用启动板访问安装指南,或者在产品 CD 的 disk1/install.html 下找到它。
收集数据以后,您就可以开始练习 1.3:识别线程瓶颈。