プロファイリング¶
プロファイリングは、アプリケーションの CPU、メモリ、I/O などの実行状態を継続的にサンプリングおよびデータ収集することで、パフォーマンスプロファイリングデータを自動的に取得します。収集したデータはフレームグラフでリアルタイムに可視化され、各メソッド、クラス、スレッド間のコールスタックの関係とリソース消費の割合が明確に表示されるため、開発者はホットスポット関数と効率のボトルネックを特定し、コードレベルのパフォーマンス最適化のためのデータ基盤を得られます。
プロファイリングエクスプローラーでは、以下を実行できます:
-
フレームグラフに基づいて、Java、Python、Go、C/C++ などのさまざまな言語で書かれたアプリケーションの実行時動的パフォーマンスデータを分析し、非効率なアルゴリズム、メモリリーク、不適切な I/O 操作によって引き起こされるパフォーマンス問題を直感的に特定できます。
-
トレース(Trace)との関連付けにより、特定のビジネスリクエスト(Span)に対応するコード実行セグメントを取得し、ビジネスインターフェースから具体的なメソッドまでのエンドツーエンドのパフォーマンス追跡を実現して、最適化の方向性を正確に特定できます。
前提条件¶
- DataKit をインストールします。
- プロファイリングコレクターを有効化します。
プロファイリングデータが送信されると、エクスプローラーで検索と分析を行うことができます。検索フィルター、クイックフィルター、列のカスタマイズ、データエクスポートなどの操作に対応しています。
上部の「ワークスペース」セレクターを使用すると、同じサイト内の複数の認可済みワークスペースのプロファイルデータをクエリできます。個別のレコード、プロファイルファイル、フレームグラフを開くときは、そのレコードの送信元ワークスペースが使用されます。認可条件と制限については、ワークスペース間クエリの説明を参照してください。
注意
プロファイリングデータのデフォルトの保存期間は 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)のトレース詳細ページで、フレームグラフ上の任意の Span を選択すると、そのビジネスリクエストの実行時間帯における関連コードメソッドの呼び出しリストと、その Wall Time の消費割合を確認できます。
これにより、遅いビジネスリクエストから具体的な時間消費メソッドへの直接的なドリルスルー分析が可能になり、ワンクリックで完全なプロファイリング詳細ページにジャンプして、その時間帯のより包括的なパフォーマンスプロファイリングデータ(CPU、メモリなどのディメンション)を確認し、根本原因を深く調査できます。
プロファイリング詳細を表示をクリックすると、対応するプロファイリング詳細ページにジャンプして、具体的なパフォーマンスデータを確認できます。

