演習 1.3: スレッドのボトルネックの識別

始める前に、『演習 1.2 スレッド・データの収集』を完了する必要があります。

スレッド・ビューを使用したスレッドのボトルネックの検出

スレッド・ビューはアプリケーションのすべてのスレッドの状況を表示し、スレッドのデッドロックおよび競合を明示します。

ボトルネックを検出するには以下を行います。

  1. プロファイル・モニターでプロファイル・リソースを右マウス・ボタン・クリックし、「アプリケーションから開く」>「スレッド・ビュー」を選択します。スレッド・ビューが開きます。ビューは以下のようなものです。

    以下のテキストで説明されるような、このプロファイルの実行結果を示すスレッド・ビューのスクリーン・ショット。

    スレッドの間にある垂直方向の矢印に注目してください。矢印は、1 つのスレッド (矢印の開始点にあるスレッド) が、別のスレッド (矢印が指し示すスレッド) のロックのリリースを待機していることを示します。

  2. 矢印は相互に近すぎて、簡単に識別できません。これらがよく見えるようにするには、「圧縮タイム・スケールに切り替えます」ボタン をクリックして、デフォルトのリニア・タイム・スケールから圧縮タイム・スケールに切り替えます。圧縮タイム・スケールは、重大なスレッド・アクションが発生しない時間セグメントを圧縮したものです。変更された表示は以下のようになります。

    タイム・スケールを「圧縮済み」に変更した後の矢印の分布を示すスクリーン・ショット。

  3. スレッド・ビューは以下のように解釈します。
    1. プログラムの開始直後に、philo* スレッドが 4 つ作成されることに注意します。これらはすべて実行され、スリープされた後、再度短い間実行されます。プログラムが終了すると、これらはすべて Waiting for Lock 状態に変化します。
      : 「スリープ」状態は、一部のシステムでは明示的に表示できません。
    2. philo* スレッドは他の philo* スレッドからのロックを待機していますが、他のスレッドもまたロックを待機しています。この場合がデッドロックで、プログラムは行き止まりに到達していて続行できません。
      : ロックを待機しているスレッド・セグメントの上にカーソルを停止すると、ロック要求に関する詳細な情報を表示できます。ロックの名前およびロックを保持しているスレッド (「ロック中のスレッド」) を示すツールの説明が表示されます。
  4. スレッド・セグメントの詳細な情報は、「プロパティー」ビューで参照できます。ビューを表示するには、「ウィンドウ」>「ビューの表示」>「プロパティー」を選択します。プロパティーを表示するスレッド・セグメントを選択します。

これで、このデッドロックの原因が分かりました。『演習 1.4: スレッドのボトルネックの解決』に進んでください。

ご利用条件 | フィードバック
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.
(C) Copyright IBM Japan 2005