练习 1.2:收集线程数据

在开始之前,必须已完成练习 1.1:导入必需的资源

场景:您要调查的程序正简要运行,然后突然停止。每次运行此程序都发生此问题。 此现象是典型的线程死锁,所以要求您调查此程序中的线程是如何交互的。

要找到可能的线程死锁,首先收集线程数据。然后使用“概要分析与记录日志”透视图中的“线程视图”分析数据。

收集线程数据将允许您识别死锁,或找出导致应用程序失败的线程。

准备收集线程数据

要收集线程数据,您必须在“概要分析与记录日志”透视图中。要切换至此透视图:

  1. 从 Software Development Platform 菜单栏中,选择窗口 > 打开透视图 > 其它...,打开“选择透视图”对话框。
  2. 在对话框的左下部,单击显示所有。 复选框会出现一个选中标记。
  3. 从透视图列表中,选择概要分析与记录日志并单击确定
  4. 如果打开了“确认启用”对话框,单击总是启用功能,不要再次询问,然后单击确定
  5. Software Development Platform 切换至“概要分析与记录日志”透视图。

收集 philosopher 应用程序的线程数据

要收集数据:

  1. 从 Software Development Platform 菜单栏,选择窗口 > 显示视图 > 控制台来打开“控制台”视图。“控制台”视图允许您在应用程序处理时跟踪它。
  2. 创建概要分析配置:
    1. 从菜单栏中,选择运行 > 概要分析...。打开“概要分析”对话框。
    2. 在“配置”列表中,双击 Java 应用程序条目。将显示 New_configuration 条目。
    3. 在“名称”字段中,输入 PhilosopherThreads
    4. 在“主要”选项卡中,如果还没有在“项目”字段中输入 philosopher,则执行以下步骤:
      1. 在“项目”字段的旁边,单击浏览。打开“项目选择”对话框。
      2. 选择 philosopher,然后单击确定
    5. 在“主要类”字段的旁边,单击搜索
    6. 在“选择主要类型”对话框中,选择 MaitreDHote,然后单击确定
    7. 如果正在使用 IBM Java 虚拟机(JVM),则执行以下步骤:
      1. 在“概要分析”对话框中,单击“实参”选项卡。
      2. VM 实参下,输入 -Xj9 指定正确的 JVM 版本。
    8. 在“概要分析”对话框中,单击“概要分析”选项卡。
    9. 在“概述”子选项卡中,选中“线程分析”概要分析集的复选框。(概要分析集定义要为运行收集的概要分析数据的类型。)
  3. 单击概要分析。运行应用程序并显示更改如下:

当应用程序达到特定点时,停止处理。输出类似于:

. . .
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:识别线程瓶颈

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