プロファイルの検索

プロファイルの検索

タグによるプロファイルの検索

各行は、短時間のプロセスのプロファイルです。デフォルトでは、プロファイルは 1 分に 1 回アップロードされます。言語に応じて、これらのプロセスは 15 秒から 60 秒の間でプロファイルされます。

環境トレース構成から設定されたインフラストラクチャータグまたはアプリケーションタグに従ってフィルタリングできます。デフォルトでは、次のファセットを使用できます。

ファセット 定義
Env アプリケーションが実行されている環境(productionstaging)。
サービス コードが実行しているサービスの名前。
バージョン コードのバージョン。
ホスト プロファイルされたプロセスが実行しているホスト名。
ランタイム プロファイルされたプロセスが実行しているランタイムのタイプ(JVMCPython)。

次のメジャーを使用できます。

メジャー 定義
CPU CPU 使用量 (コア単位)
メモリ割り当て プロファイル全体でのメモリ割り当て率。割り当てられたメモリはプロファイル中にガベージコレクションされる可能性があるため、この値はシステムのメモリ量を超える可能性があります。

プロファイル

行をクリックして、特定のプロファイルを表示します。

特定のプロファイル

ヘッダーには、プロファイルを生成したサービスや、それに関連付けられた環境とコードバージョンなど、プロファイルに関連付けられた情報が含まれています。

4 つのタブがプロファイルヘッダーの下にあります。

タブ 定義
プロファイル 現在見ているプロファイルのフレームグラフとサマリーテーブル。プロファイルタイプ(CPUMemory allocation)を切り替えることができます
Analysis コードの潜在的な問題または改善の領域を示唆する一連のヒューリスティック。現在、Java でのみ利用できます。
メトリクス 同じサービスのすべてのプロファイルからのプロファイラーメトリクス
ランタイム情報 サポートされている言語のランタイムプロパティとプロファイルタグ。

: 各プロファイルの右上隅には、次のオプションがあります。

  • プロフィールをダウンロードする
  • プロファイルをフルスクリーンに切り替える

プロファイルタイプ

Profiles タブでは、特定の言語で使用できるすべてのプロファイルタイプを確認できます。言語によって、プロファイルについて収集される情報は異なります。

有効にすると、次のプロファイルタイプが収集されます。

CPU in Java Code
各メソッドが CPU での実行に費やした時間を示します。これには JVM(Java、Kotlin など)で実行されるコードが含まれますが、JVM オペレーションや JVM 内から呼び出されるネイティブコードは含まれません。
Allocation
各メソッドによって割り当てられたヒープメモリの量を示します。これには、後で解放された割り当ても含まれます。
Wall Time in Native Code
ネイティブコードで費やされた経過時間を示します。経過時間には、コードが CPU で実行されている時間、I/O を待機している時間、およびメソッドの実行中に発生するその他の時間が含まれます。このプロファイルには、通常ほとんどのアプリケーションコードである JVM バイトコードの実行に費やされた時間は含まれていません。
Class load
各メソッドによってロードされたクラスの数を示します。
Exception Profile
各メソッドによってスローされたエラーと例外の数を示します。
File I/O
各メソッドがファイルの読み取りと書き込みに費やした時間を示します。
Lock
各メソッドがロックの待機に費やした時間を示します。
Socket I/O
各メソッドがソケット I/O の読み取りと書き込みに費やした時間を示します。

有効にすると、次のプロファイルタイプが収集されます。

CPU
Python やネイティブコードを含む、各関数が CPU での実行に費やした時間を示します。
Allocation
各関数によって割り当てられたヒープメモリの量を示します。これには、後で解放された割り当ても含まれます。Python 3 でのみサポートされます。
Allocation Count
各関数によるヒープ割り当ての数を示します。これには、後で解放された割り当ても含まれます。
Wall Time
各関数が使用した経過時間を表示します。経過時間には、コードが CPU で実行されている時間、I/O を待機している時間、および関数の実行中に発生するその他の時間が含まれます。
Exceptions
各関数によって発生したキャッチまたはキャッチされない例外の数を示します。
Lock
各関数がロック(ロックの待機または保持)に費やした時間、または関数がロックの施錠/解除を監視した回数を示します。
Uncaught Exceptions
try/except ブロックでキャッチされなかった例外を示します。
Exceptions
プログラムの実行中に発生した例外を示します。

有効にすると、次のプロファイルタイプが収集されます。

CPU Time
各関数が CPU での実行に費やした時間を示します。ネットワーキング、チャンネル、ミューテックス、スリープの待機のような Off-CPU の時間は、このプロファイルでキャプチャされません。ミューテックスおよびブロックのプロファイルをご確認ください。
Allocations
アプリケーションの開始以降、各関数によってヒープメモリに割り当てられたオブジェクトの数を示します。これには、後で解放された割り当ても含まれます。これは、ガベージコレクションの負荷を調査する際に役立ちます。
Allocated Memory
アプリケーションの開始以降、各関数によって割り当てられたヒープメモリの量を示します。これには、後で解放された割り当ても含まれます。 Go ではこれを alloc_space と呼びます。これは、ガベージコレクションの負荷を調査する際に役立ちます。
Heap Live Objects
各関数によってヒープメモリに割り当てられたオブジェクトの数と、アプリケーションの開始以降に割り当てられたまま残り、最後のガベージコレクション以降存在するオブジェクトの数を示します。これは、サービスの全体的なメモリ使用量を調査する際に役立ちます。
Heap Live Size
各関数によって割り当てられ、アプリケーションの開始以降に割り当てられたまま残り、最後のガベージコレクション以降存在するヒープメモリの量を示します。Go ではこれを inuse_space と呼びます。これは、サービスの全体的なメモリ使用量を調査する際に役立ちます。
Mutex
アプリケーションの開始以降、関数がミューテックスを待機している時間を示します。このプロファイルのスタックトレースは、ミューテックスで続行をブロックされた別の goroutine を許可した Unlock() 演算子をポイントします。スピンロックを使用したショートミューテックスの競合はこのプロファイルでキャプチャされませんが、CPU プロファイルで確認できます。
Block
アプリケーションの開始以降、関数がミューテックスおよびチャンネルオペレーションを待機している時間を示します。スリープ、GC、ネットワーク、Syscall オペレーションは、このプロファイルでキャプチャされません。ブロッキングオペレーションは、ブロックが解除されてからのみキャプチャされるため、スタックしていると思われるアプリケーションのデバッグにこのプロファイルを使用することはできません。ミューテックスの競合の場合、このプロファイルのスタックトレースはブロックされた Lock() 演算子をポイントします。これにより、ブロックされているプログラムがわかり、ミューテックスプロファイルにより、競合の原因となっているプログラムの部分がわかります。この点に関する詳しい情報は、Go におけるプロファイリングのブロックリサーチをご覧ください。
Goroutines
同じ関数(CPU 上および待機中の Off-CPU)で現在実行中の goroutines の数のスナップショットを示します。スナップショット間での goroutines の増加は、プログラムで goroutines がリークしていることを示しています。最も健康なアプリケーションでは、このプロファイルはワーカープールにより使用され、その goroutines 使用数が表示されます。遅延の影響を非常に受けやすく、大量の goroutines(10.000 以上)を使用するアプリケーションの場合、このプロファイルを有効にすると O(N) stop-the-world 型の一時停止が必要になることにご留意ください。一時停止はプロファイリング期間(デフォルトは 60 秒)ごとに発生し、通常 goroutine あたり ~1µsec 継続します。~100ms の p99 レイテンシー SLO の典型的なアプリケーションでは、この警告を無視することが可能です。より詳しい情報については、Go における Goroutine プロファイリングリサーチをご覧ください。

有効にすると、次のプロファイルタイプが収集されます。

CPU
Ruby やネイティブコードを含む、各関数が CPU での実行に費やした時間を示します。
Wall Time
各関数が使用した経過時間を表示します。経過時間には、コードが CPU で実行されている時間、I/O を待機している時間、および関数の実行中に発生するその他の時間が含まれます。

その他の参考資料