演習 1.2: スレッド・データの収集
始める前に、『演習 1.1: 必要なリソースのインポート』を完了する必要があります。
シナリオ: 調査しようとしているプログラムは、実行後すぐに突然停止するとします。これは、プログラムを実行するたびに毎回発生するとします。この動作はスレッドのデッドロックの典型的な動作であるため、このプログラム中のスレッドの相互作用の方法を調査するように依頼されました。
考えられるスレッドのデッドロックを突き止めるため、まずスレッドのデータを収集します。それからプロファイルおよびロギング・パースペクティブで「スレッド」ビューを使用してデータを分析します。
スレッドのデータの収集により、デッドロックを識別するか、またはアプリケーションの失敗の原因としてのスレッドを除外するかのいずれかが可能です。
スレッド・データ収集の準備
スレッド・データを収集するには、プロファイルおよびロギング・パースペクティブである必要があります。
パースペクティブを切り替えるには以下を行います。
- Software Development Platform のメニュー・バーで、「ウィンドウ」>「パースペクティブを開く 」> 「その他...」を選択すると、「パースペクティブの選択」ダイアログ・ボックスが開きます。
- ダイアログ・ボックスの左下にある「すべて表示」をクリックします。チェック・ボックスにチェックが表示されます。
- パースペクティブのリストから「プロファイルおよびロギング」を選択して「OK」をクリックします。
- 「使用可能化の確認」ダイアログ・ボックスが開いた場合、「常に機能を使用可能にし、今後このメッセージを表示しない」をクリックして、「OK」 をクリックします。
- Software Development Platform がプロファイルおよびロギング・パースペクティブに切り替わります。
philosopher アプリケーションのためのスレッド・データの収集
データを収集するには以下を行います。
- Software Development Platform のメニュー・バーで、「ウィンドウ」>「ビューの表示」>「コンソール」 を選択して、「コンソール」ビューを開きます。「コンソール」ビューでは、アプリケーションのプロセスに従ってアプリケーションを進めることができます。
- プロファイル構成を作成します。
- メニュー・バーから「実行」>「プロファイル...」を選択すると、「プロファイル」ダイアログ・ボックスが開きます。
- 「構成」リストから「Java アプリケーション」エントリーをダブルクリックします。New_configuration エントリーが表示されます。
- 「名前」フィールドに PhilosopherThreads と入力します。
- 「メイン」タブで、philosopher がまだ「プロジェクト」フィールドに入力されていない場合、以下を行います。
- 「プロジェクト」フィールドの横にある「ブラウズ」をクリックします。「プロジェクトの選択」ダイアログ・ボックスが開きます。
- 「philosopher」を選択して「OK」をクリックします。
- 「メイン・クラス」フィールドの横にある「検索」をクリックします。
- 「メイン型を選択」ダイアログ・ボックスで 「MaitreDHote」を選択して、「OK」をクリックします。
- IBM 製の Java 仮想マシン (JVM) を使用している場合、以下を行います。
- 「プロファイル」ダイアログ・ボックスで、「引き数」タブをクリックします。
- 「VM 引き数」の下で -Xj9 と入力して、正しい JVM のバージョンを指定します。
- 「プロファイル」ダイアログ・ボックスで、「プロファイル」タブをクリックします。
- 「概要」サブタブで、「スレッド分析」プロファイル・セットのチェック・ボックスをチェックします。(プロファイル・セット は、実行に対して収集されるプロファイル・データのタイプを定義します。)
- 「プロファイル」をクリックします。アプリケーションが実行して、表示が以下のように変更されます。
- プロファイル・リソースが「プロファイル・モニター」に表示されます。
- 実行に対する出力が「コンソール」ビューに表示されます。
注: Agent Controller が利用不能であることを示すセキュリティー・メッセージを受け取った場合、『データを収集できなかった場合』を読んでください。
アプリケーションがあるポイントに到達すると、処理は停止します。出力内容は以下のようなものです。
. . .
philo#3: waiting for right fork#3
philo#2: waiting for right fork#2
philo#1: waiting for right fork#1
philo#0: waiting for right fork#0
HeadWaiter: all philosophers are locked for 6 times.
exiting application.
これはプログラムが停止した場所です。この実行についてはスレッド・データを収集しており、スレッドが停止した原因を分析できます。
データを収集できなかった場合
プロファイル・データを収集できるようにするには、Agent Controller が実行中でなければなりません。Agent Controller が利用不能であることを示すメッセージを受け取った場合、Agent Controller がインストールされているか確認してから手動で開始し、再試行してください。詳しい説明は、インストール・ガイドを参照してください。
インストール・ガイドを使用するには、ランチパッドを使用するか、製品 CD の disk1/install.html から見つけてください。
データを収集したら、『演習 1.3: スレッドのボトルネック』に進んでください。