プロファイリング¶
プロファイリングは、CPU、メモリ、I/O などにおけるアプリケーションの実行状態を継続的にサンプリングおよびデータ収集することで、そのパフォーマンスプロファイルデータを自動的に取得します。収集されたデータはフレームグラフによりリアルタイムで可視化され、各メソッド、クラス、スレッド間の呼び出しスタック関係とリソース消費割合を明確に表示します。これにより、開発者はホットスポット関数や効率のボトルネックを特定し、コードレベルのパフォーマンス最適化のためのデータ基盤を提供します。
プロファイリングエクスプローラーでは、以下のことが可能です:
-
フレームグラフに基づいて、Java、Python、Go、C/C++ など異なる言語のアプリケーションの実行時動的パフォーマンスデータを分析し、非効率なアルゴリズム、メモリリーク、または不適切な I/O 操作によって引き起こされるパフォーマンス問題を直感的に特定できます。
-
トレースと関連付けることで、特定のビジネスリクエスト(スパン)に対応するコード実行断片を取得し、ビジネスインターフェースから具体的なメソッドに至るエンドツーエンドのパフォーマンストレーシングを実現し、最適化の方向性を正確に特定できます。
前提条件¶
プロファイリングデータがアップロードされると、エクスプローラーでクエリと分析が可能になります。検索フィルター、クイックフィルター、列のカスタマイズ、データエクスポートなどの操作をサポートします。
注意
プロファイリングデータはデフォルトで 7 日間保存されます。
プロファイリング詳細ページ¶
パフォーマンス¶
詳細ページでは、自動的に「パフォーマンス」タブが開き、属性タグ、パフォーマンスフレームグラフ、および実行情報が表示されます。
現在のプロファイルファイルのサイズが 20MB を超える場合、システムはオンライン解析をサポートしていません。ファイルをローカルにダウンロードし、専門的な分析ツールを使用して表示できます。例:
フレームグラフ¶
プロファイリングの核心は、フレームグラフを使用したコードレベルのパフォーマンス分析です。フレームグラフは、コールスタック内の各メソッドの実行時間やリソース消費の分布を直感的に表示します。システムは同時に、メソッド、クラスライブラリ、スレッドなどの複数のディメンションに基づく集計データ分析ビューを提供し、実行割合が最も高いホットスポットメソッドを直接リストアップすることで、コアとなるパフォーマンス問題への迅速な焦点化を支援します。
分析機能は複数のプログラミング言語をサポートしており、言語によって観測可能なメトリクスディメンションが異なります。例:
| 分類 | 説明 |
|---|---|
| CPU Time | CPU 上での各メソッドの実行時間 |
| Wall Time | 各メソッドの経過時間。CPU 上での実行時間、I/O 待機時間、および関数実行中に発生するその他すべての時間を含む |
| Heap Live Size | 使用中のヒープメモリ量 |
| Allocated Memory | 各メソッドによって割り当てられたヒープメモリ量。後で解放された割り当てを含む |
| Allocations | 各メソッドによるヒープ割り当て回数。後で解放された割り当てを含む |
| Thrown Exceptions | 各メソッドによってスローされた例外数 |
| Lock Wait Time | 各関数がロックを待機した時間 |
| Locked Time | 各関数がロックを保持していた時間 |
| Lock Acquires | 各メソッドがロックを取得した回数 |
| Lock Releases | 各メソッドがロックを解放した回数 |
| 分類 | 説明 |
|---|---|
| CPU Time | CPU 上での各メソッドの実行時間。サービスの Java バイトコードおよびランタイム操作の実行時間を含み、JVM 経由のネイティブコード呼び出し時間は含まない |
| Wall Time in Native Code | ネイティブコードのサンプリング回数。コードが CPU 上で実行されているとき、I/O を待機しているとき、およびメソッド実行中に発生するその他すべての状況でサンプリングが発生する可能性があります。アプリケーションコードの実行に関連する Java バイトコード呼び出しは含まれません |
| Allocations | 各メソッドによるヒープ割り当て回数。後で解放された割り当てを含む |
| Allocated Memory | 各メソッドによって割り当てられたヒープメモリ量。後で解放された割り当てを含む |
| Heap Live Objects | 各メソッドに割り当てられ、生存しているオブジェクト数 |
| Thrown Exceptions | 各メソッドによってスローされた例外数 |
| Lock Wait Time | 各メソッドがロックを待機した時間 |
| Lock Acquires | 各メソッドがロックを取得した回数 |
| File I/O Time | 各メソッドがファイルの読み取りと書き込みに費やした時間 |
| File I/O Written | 各メソッドによってファイルに書き込まれたデータ量 |
| File I/O Read | 各メソッドによってファイルから読み取られたデータ量 |
| Socket I/O Read Time | 各メソッドがソケットからの読み取りに費やした時間 |
| Socket I/O Write Time | 各メソッドがソケットへの書き込みに費やした時間 |
| Socket I/O Read | 各メソッドによってソケットから読み取られたデータ量 |
| Socket I/O Written | 各メソッドによってソケットに書き込まれたデータ量 |
| Synchronization | 各メソッドが同期処理に費やした時間 |
クイック操作¶
- 検索:タイプ選択ボックスにメソッド名のキーワードを入力して部分一致検索し、一致結果から直接選択することで、特定のメソッドを素早く特定してフォーカス表示できます。
- コピー:ディメンションで、ホバーするとメソッドの詳細をコピーできます。
- クリック選択:ディメンションリストはデフォルトですべてのメソッドを表示します。任意のメソッドをクリックすると、フレームグラフがそのメソッドの呼び出しパスにフォーカスして表示します。複数のメソッドを選択して実行状況を比較することもできます。選択したメソッドをもう一度クリックすると選択が解除され、全体ビューに戻ります。
実行情報¶
実行情報タブでは、対応するプログラミング言語のランタイムに関連するフィールドとタグ属性を確認できます。これには、プロセスパラメータ、環境変数、システムタグなどのフィールドが含まれます。任意のタグをフィルター条件としてエクスプローラーリストパネルに追加し、関連データを迅速にフィルタリングできます。また、タグの内容を直接コピーして、ログやトレースでの関連クエリに使用することもできます。
トレースとプロファイリングの関連付け¶
アプリケーションで APM 分散型トレーシングとプロファイリング収集の両方が有効になっている場合、システムはトレースレベルでパフォーマンスプロファイルデータを関連付けることをサポートします。アプリケーションパフォーマンスモニタリング(APM)のトレース詳細ページで、フレームグラフ上の任意のスパンを選択すると、そのビジネスリクエストの実行時間帯に関連するコードメソッド呼び出しリストと、その Wall Time の消費割合を表示できます。
これにより、遅いビジネスリクエストから具体的な時間消費メソッドへの直接的な分析が可能になり、また、完全なプロファイリング詳細ページへのワンクリックジャンプをサポートし、その時間帯におけるより包括的なパフォーマンスプロファイルデータ(CPU、メモリディメンションなど)を表示して、詳細な根本原因調査を行うことができます。
プロファイリング詳細を表示をクリックすると、対応するプロファイリング詳細ページにジャンプし、具体的なパフォーマンスデータを確認できます。

