「ロック」パースペクティブには、ロックが原因で発生したすべての競合を把握する際に役立つ情報がグラフ形式およびテーブル形式で表示されます。
以下の 2 種類のロックの情報が表示されます。
Java モニターはデフォルトで表示され、 アプリケーション競合の問題を解決するときに最も有用です。 システム・モニターを表示するには、テーブルまたはプロットのツールバーにある「表示...」アイコンを使用します。
ガーベッジ・コレクションの時間は、 ガーベッジ・コレクション・サイクル中に保留されるすべてのモニターの 保持時間から除外されます。
棒グラフには、 アプリケーション・ロックの競合の程度の概要が表示されます。
棒の高さは低速ロックの数を表し、グラフ内のすべての列に対する相対値になっています。 低速がカウントされるのは、 要求されたモニターが既に別のスレッドによって所有されており、 要求側のスレッドがブロックされたときです。
それぞれの棒の色は、テーブルの「取得失敗 (%)」列の値によって決まります。 赤 (100%)、黄 (50%)、緑 (0%) へと徐々に変化します。 赤い棒は、モニターが要求されたときに毎回スレッドがブロックされていることを示します。 緑の棒はスレッドがまったくブロックされていないことを示します。
もっとも競合しているモニターのみが 表示されます。
モニター・テーブルには、 リストされている各モニターの以下のデータが表示されます。
列見出し | 説明 |
---|---|
取得失敗 (%) | 同期コードのロックに入ろうとするスレッドがロックを取得できるまでブロックされた取得 (獲得) の割合。 |
取得: | 解凍中にロックが取得された回数の累計。 |
低速: | 非再帰的ロックを獲得しようとしたが、既に別のスレッドによって所有されていたため、要求側のスレッドがロックを待機する必要があった回数の累計。 |
再帰的: | 再帰的獲得の総数。 再帰的獲得は、要求側のスレッドが既にモニターを所有している場合に発生します。 |
使用率 (%): | ロックが保持されていた時間を、出力に費やされた時間で除算した値。 |
平均保持時間: | スレッドによってロックが保持 (所有) されていた時間の 平均。 例えば、synchronized ブロックで消費された時間を プロセッサー・クロックのティック数で測定したもの。 |
名前: | モニター名。 この列は、名前が不明な場合はブランクです。 |
テーブルには、解凍された すべてのモニターがリストされます。 最初に 「取得失敗 (%)」列に着目してください。 取得失敗 (%) が高い場合は、ロックによって保護される同期リソースで頻繁に競合が発生しています。 この競合が原因で、Java アプリケーションの規模をこれ以上拡大できなくなっている可能性があります。
ロックの取得失敗 (%) の値が高い場合は、 平均保持時間および使用率 (%) を見てください。 使用率 (%) および平均保持時間が両方とも高い場合は、ロックが保持されている間に実行される処理の量を削減する必要がある可能性があります。 使用率 (%) が高いが平均保持時間が短い場合は、ロックによって保護されるリソースをさらに細分化し、現行のロックを複数のロックに分離する必要がある可能性があります。
モニター名には、オブジェクトのアドレス (大括弧の中に表示されます) およびロックのタイプが含まれています。例えば、オブジェクトをクラス Object と同期させる場合は、モニター名にアドレスおよび java/lang/Object が入ります。
AIX® アーキテクチャーでのロックの動作は、他のプラットフォームの場合と異なります。 AIX では、特にシステム・モニター・ロックの場合に、より多くのロックが不正な実行状態にあるものとして表示される可能性があります。 これは、AIX での予期された動作です。