ヘルプ APM スレッドダンプ分析

スレッドダンプ分析

スレッドダンプ分析で複数スレッドアプリケーションのスレッド状況、スタックトレース、リソース使用量を分析することで、パフォーマンス問題のトラブルシュートを容易にします。
これにより、ボトルネックやデッドロックの特定と解決を効率的に行えます。

目次

ユースケース:本番環境のパフォーマンス管理

スレッドダンプ分析を使用して、本番環境のパフォーマンス問題を事前に検知します。スレッドダンプを定期的に取得してデータの検査を行うことで、ボトルネックの特定、デッドロックの解消、ガベージコレクションの監視、例外の調査を行えます。
フレームグラフや要求スタックツリーといった分析ツールを用いて、パフォーマンス問題によりエンドユーザーに影響が出る前に、コードの最適化やリソースの補填といったアクションを行えます。

スレッドダンプメトリック

スレッドダンプメトリックの表示方法:

  1. Site24x7にログインします。
  2. [APM]→[アプリケーション]→[スレッドプロファイル]タブに移動します。

    Thread dump list

  1. リストからスレッドダンプをクリックします。

    次のタブにより、パラメーターとメトリックが表示されます。

スレッド数サマリー

指定したスレッドダンプに関連するスレッドの概要を表示します。

概要項目では、待機時間、ブロック済み、実行可能、待機中といった状態を基にしたスレッドの内訳を表示します。

スタック長グラフでは、10未満、10から100の間、101以上といった長さに基づいた内訳を表示します。

スレッド名グループグラフでは、スレッドダンプ内のスレッドグループのスレッドごとの内訳を表示します。

Thread count summary

より詳細に分類したい場合は、グラフのカテゴリーをクリックしてください。
これによりスレッドダンプ分析タブに移動し、フィルターが自動で適用されてスレッド情報を表示します。

Thread name groups

次の項目で、スレッド数の合計と状態ごとのスレッド(ブロック、待機中、実行可能、待機時間)を各グループで表示します。

Identical stack trace

同一スタックトレースグラフでは、スタックトレースを共有している場合に、スレッドグループの内訳を表示します。

グループをクリックすることで、そのグループ内のスレッド情報を表示します。

最後の項目では同一のスタックトレースを表示します。

上記の各スタックトレース情報には、トラブルシューティングのヒントが記載されます。


推移グラフ

Transitive graph tab

推移グラフで、複数スレッドのアプリケーション内のスレッド間の接続を描画し、他のスレッドでのスレッドブロッキングを特定できます。
スレッド名をクリックすると各スタックトレースを表示します。

上記グラフにはトラブルシューティングのヒントが記載されます。

直近の実行メソッド

Last executed methods tab

[直近の実行メソッド]タブで、降順で実行されたメソッドとそれに該当するスレッド数とパーセンテージが表示されます。

[完全なスタックトレースを表示]をクリックすると、[スレッドダンプ分析]タブに移動してスタックトレースを分析できます。

CPUスレッド

CPU threads tab

[CPUスレッド]タブで上位5のCPU消費スレッドとそのスタックを表示して、アプリケーションのパフォーマンスを分析できます。

  • フィルターを使用して、名前により特定のスレッドを検索できます。
  • [完全なスタックトレースを表示]をクリックすると、[スレッドダンプ分析]タブに移動してスタックトレースを分析できます。


GCスレッド

GC threads tab

ガベージコレクション(GC)スレッドでアプリケーションのメモリ管理を行い、GCに関連するパフォーマンス問題の特定と解決を行います。

[GCスレッド]タブで、GCデーモンとGCタスク数をそれぞれ表示します。

数をクリックすることで、スレッドリストを表示します。

 

デッドロック

Deadlock tab

デッドロックはあるスレッドが他のスレッドで必要なリソースを保持していることで処理できなくなったスレッドグループのことを指します。

[デッドロック]タブで待機中のリソースや各スレッドのステータスといったデッドロックと影響したスレッドに関する情報を表示します。
このデータを使用してデッドロックを特定し、リソースの開放や処理配列の変更を行います。

次の情報を表示します:

  • デッドロックに関連するスレッド名とID
  • デッドロックのグラフ表示
[完全なスタックトレースの表示]をクリックすると、[スレッドダンプ分析]タブに移動してデッドロックと影響したスレッドを表示します。

例外

Exceptions tab

複数スレッドのアプリケーションで発生したエラーを監視し、アプリケーションの稼働率を向上させます。

[例外]タブで、上位5の例外スレッドと使用されたメソッドを表示します。

  • フィルターを使用して、名前で特定のスレッドを検索できます。
  • [完全なスタックトレースの表示]をクリックすると、[スレッドダンプ分析]タブに移動してスレッド関連の情報を表示します。


ファイナライザースレッド

Finalizer threads tab

JVMのファイナライザースレッドはガベージコレクションオブジェクトのメソッド"finalize()"を実行し、破棄する前にクリーンアップ操作を行います。

[ファイナライザースレッド]タブで、ファイナライザースレッドで発生したスレッドブロックの推移グラフを表示します。該当するスレッドを開放して、アプリケーションのメモリ問題の防止に繋げられます。

  • スレッド名をクリックすると、該当するスタックトレースを表示します。
  • 上記グラフにトラブルシューティングのヒントが記載されます。

フレームグラフ

Flame graph tab

フレームグラフで各関数やコードセグメントで要した時間の内訳を表示します。関数やコードセグメントを水平バー表示し、幅はスレッド数(スタックトレース内でそのメソッドを要求したスレッド数)を表します。
これにより改良、最適化が必要な箇所を特定し、複雑なシステム内でもボトルネックを把握できます。

要求スタックツリー

Call stack tree tab

要求スタックツリーで、複数スレッドのアプリケーションのパフォーマンスを可視化します。関数の階層表示、関数間のフローと状況の描画を行います。
これによりプログラム構造の把握、コードのデバッグ、再帰の特定、依存関係の分析、例外パスの追跡を行えます。

スレッドダンプ分析

Thread dump analysis tab

[スレッドダンプ分析]タブで、選択したスレッドダンプ内のスレッドリストを表示します。
[フィルターの追加]を使用して、検索条件を追加できます。

  • 他のタブの[完全なスタックトレースの表示]をクリックすると、このタブが表示されます。
  • 分析が完了すると、このタブは閉じられます。