プロファイルタイプ

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

プロファイリングを有効にすると、サポートされている Java バージョンについて、以下のプロファイルタイプが収集されます。

CPU
各メソッドが CPU での実行に費やした時間。これには JVM(Java、Kotlin など)で実行されるコードが含まれますが、JVM オペレーションや JVM 内から呼び出されるネイティブコードは含まれません。
Allocations
The number of heap allocations made by each method, including allocations which were subsequently freed.
Requires: Java 11
Allocated Memory
The amount of heap memory allocated by each method, including allocations which were subsequently freed.
Requires: Java 11
Heap Live Objects
各メソッドがヒープメモリに割り当てたオブジェクトのうち、まだガベージコレクションとして処理されていないオブジェクトの数。これは、サービスの全体的なメモリ使用量を調査し、潜在的なメモリリークを特定する際に役立ちます。
必要なもの: Java 11
最低バージョン: 1.17.0
Heap Live Size
各メソッドによって割り当てられたヒープメモリのうち、まだガベージコレクションとして処理されていないメモリの量。これは、サービスの全体的なメモリ使用量を調査し、潜在的なメモリリークを特定する際に役立ちます。
必要なもの: Java 11
最低バージョン: 1.17.0
Wall Time in Native Code
ネイティブコードで費やされた経過時間。経過時間には、コードが CPU で実行されている時間、I/O を待機している時間、およびメソッドの実行中に発生するその他の時間が含まれます。このプロファイルには、通常ほとんどのアプリケーションコードである JVM バイトコードの実行に費やされた時間は含まれていません。
Class Load
各メソッドによってロードされたクラスの数。
Thrown Exceptions
各メソッドによってスローされたエラーと例外の数、およびその種類。
File I/O
各メソッドがファイルの読み取りと書き込みに費やした時間。
Lock
各メソッドがロックの待機に費やした時間。
Socket I/O
各メソッドがソケット I/O の読み取りと書き込みに費やした時間。

プロファイリングを有効にすると、お使いの Python バージョンに応じて、前述のように以下のプロファイルタイプが収集されます。

Wall Time
各関数が使用した経過時間。経過時間には、コードが CPU で実行されている時間、I/O を待機している時間、および関数の実行中に発生するその他の時間が含まれます。
必要なもの: Python 2.7+
Lock Wait Time
各関数がロックの待機に費やした時間。
必要なもの: Python 2.7+
Locked Time
各関数がロックの保持に費やした時間。
必要なもの: Python 2.7+
Lock Acquires
各関数がロックを取得した回数。
必要なもの: Python 2.7+
Lock Releases
各関数がロックを解除した回数。
必要なもの: Python 2.7+
CPU
Python やネイティブコードを含む、各関数が CPU での実行に費やした時間。
必要なもの: Python 2.7+、POSIX プラットフォーム
Heap Live Size
各関数によって割り当てられたヒープメモリのうち、まだガベージコレクションとして処理されていないメモリの量。これは、サービスの全体的なメモリ使用量を調査し、潜在的なメモリリークを特定する際に役立ちます。
必要なもの: Python 3.5+
Allocated Memory
各関数によって割り当てられたヒープメモリの量。これには、後で解放された割り当ても含まれます。
必要なもの: Python 3.5+
Allocations
各関数によるヒープ割り当ての数。これには、後で解放された割り当ても含まれます。
必要なもの: Python 3.5+
Thrown Exceptions
各関数によって発生したキャッチまたはキャッチされない例外の数、およびその種類。
必要なもの: Python 3.7+、POSIX プラットフォーム

プロファイリングを有効にすると、サポートされている Go バージョンについて、以下のプロファイルタイプが収集されます。

CPU Time
各関数が CPU での実行に費やした時間。ネットワーキング、チャンネル、ミューテックス、スリープの待機のような Off-CPU の時間は、このプロファイルでキャプチャされません。ミューテックスおよびブロックのプロファイルをご確認ください。
Allocations
プロファイリング期間中 (デフォルト: 60 秒) に各関数がヒープメモリで割り当てたオブジェクトの数 (その後に解放された割り当ても含む)。Go ではこれを alloc_objects と呼びます。スタックの割り当ては追跡されません。これは、ガベージコレクションの負荷を調査する場合に便利です。バージョン 1.33.0 でのこの指標の変更点については、差分プロファイルをご覧ください。
Allocated Memory
プロファイリング期間中 (デフォルト: 60 秒) に各関数が割り当てたヒープメモリの数 (その後に解放された割り当ても含む)。Go ではこれを alloc_space と呼びます。スタックの割り当ては追跡されません。これは、ガベージコレクションの負荷を調査する場合に便利です。バージョン 1.33.0 でのこの指標の変更点については、差分プロファイルをご覧ください。
Heap Live Objects
各関数がヒープメモリに割り当てたオブジェクトのうち、まだガベージコレクションとして処理されていないオブジェクトの数。Go ではこれを inuse_objects と呼びます。これは、サービスの全体的なメモリ使用量を調査し、潜在的なメモリリークを特定する際に役立ちます。
Heap Live Size
The amount of heap memory allocated by each function that has not yet been garbage collected. Go calls this inuse_space. This is useful for investigating the overall memory usage of your service and identifying potential memory leaks.
Mutex
プロファイリング期間中 (デフォルト: 60 秒) に関数がミューテックスを待機している時間。このプロファイルのスタックトレースは、ミューテックスで続行をブロックされた別の goroutine を許可した Unlock() 演算子をポイントします。スピンロックを使用したショートミューテックスの競合はこのプロファイルでキャプチャされませんが、CPU プロファイルで確認できます。バージョン 1.33.0 でのこの指標の変更点については、差分プロファイルをご覧ください。
Block
プロファイリング期間中 (デフォルト: 60 秒) に関数がミューテックスおよびチャンネルオペレーションを待機している時間。スリープ、GC、ネットワーク、Syscall オペレーションは、このプロファイルでキャプチャされません。ブロッキングオペレーションは、ブロックが解除されてからのみキャプチャされるため、スタックしていると思われるアプリケーションのデバッグにこのプロファイルを使用することはできません。ミューテックスの競合の場合、このプロファイルのスタックトレースはブロックされた Lock() 演算子をポイントします。これにより、ブロックされているプログラムがわかり、ミューテックスプロファイルにより、競合の原因となっているプログラムの部分がわかります。この点に関する詳しい情報は、Datadog の Go におけるプロファイリングのブロックリサーチをご覧ください。バージョン 1.33.0 でのこの指標の変更点については、差分プロファイルをご覧ください。: ブロックプロファイラーを使用すると、本番環境において顕著なオーバーヘッドが発生する可能性があります。本番環境で有効にする場合は、高いレート (100000000、つまり 100 ミリ秒など) を選択し、レイテンシーや CPU 使用率の増加の兆候を確認します。
Goroutines
同じ関数(オン CPU とオフ CPU の待機の両方)で現在実行中の goroutines の数のスナップショット。スナップショット間での goroutines の増加は、プログラムで goroutines がリークしていることを示しています。最も健康なアプリケーションでは、このプロファイルはワーカープールとその goroutines 使用数によって支配されます。遅延の影響を非常に受けやすく、大量の goroutines(10.000 以上)を使用するアプリケーションの場合、このプロファイルを有効にすると stop-the-world 型の一時停止が必要になることにご留意ください。一時停止はプロファイリング期間(デフォルトは 60 秒)ごとに発生し、通常 goroutine あたり 1μsec ほど継続します。100ms ほどの p99 レイテンシー SLO の典型的なアプリケーションでは、この警告を無視することが可能です。より詳しい情報については、Datadog の Go における Goroutine プロファイリングリサーチをご覧ください。

差分プロファイル

: 1.33.0 より前のバージョンの Go プロファイラーでは、Allocations、Allocated Memory、Mutex、および Block のメトリクスは、プロファイリング期間中ではなく、プロセスが開始されてから累積した測定値として表示されます。バージョン 1.33.0 のデルタプロファイルへの変更により、これらの測定値が蓄積されるのではなく、どのように変化しているかを確認することができます。デルタプロファイリングはデフォルトでオンになっています。プロファイラーのバージョン 1.35.0 では、WithDeltaProfiles オプションを使用してデルタプロファイルを無効にすることができます。

プロファイラーバージョン 1.37.0 では、アップロード帯域幅の使用量を減らすため、デルタプロファイリングが有効な場合は累積プロファイルがアップロードされなくなりました。完全な累積プロファイルに依存している場合は、サポートに連絡して使用例について相談してください。

プロファイリングを有効にすると、サポートされている Ruby バージョンについて、以下のプロファイルタイプが収集されます。

CPU
Ruby やネイティブコードを含む、各関数が CPU での実行に費やした時間。
Wall Time
各関数が使用した経過時間。経過時間には、コードが CPU で実行されている時間、I/O を待機している時間、および関数の実行中に発生するその他の時間が含まれます。
Allocations (beta, v1.21.1+)
The number of objects allocated by each method during the profiling period (default: 60s), including allocations which were subsequently freed. This is useful for investigating garbage collection load.
Requires: Manual enablement
Heap Live Objects (alpha, v1.21.1+)
The number of objects allocated by each method in heap memory that have not yet been garbage collected. This is useful for investigating the overall memory usage of your service and identifying potential memory leaks.
Requires: Ruby 2.7+ and manual enablement
Heap Live Size (alpha, v1.21.1+)
The amount of heap memory allocated by each method that has not yet been garbage collected. This is useful for investigating the overall memory usage of your service and identifying potential memory leaks.
Requires: Ruby 2.7+ and manual enablement

プロファイリングを有効にすると、サポートされている Node.js バージョンについて、以下のプロファイルタイプが収集されます。

CPU (beta, v5.11.0+, v4.35.0+, v3.56.0+)
The time each function spent running on the CPU, including JavaScript and native code.
Wall Time
各関数が使用した経過時間。経過時間には、コードが CPU で実行されている時間、I/O を待機している時間、および関数の実行中に発生するその他の時間が含まれます。
Heap Live Size
各関数によって割り当てられたヒープメモリのうち、まだガベージコレクションとして処理されていないメモリの量。これは、サービスの全体的なメモリ使用量を調査し、潜在的なメモリリークを特定する際に役立ちます。

プロファイリングを有効にすると、サポートされている .NET バージョンについて、以下のプロファイルタイプが収集されます。

Wall Time
マネージドメソッドに費やされた経過時間。経過時間には、コードが CPU で実行されている時間、I/O を待機している時間、およびメソッドの実行中に発生するその他の時間が含まれます。
CPU (v2.15+)
各メソッドが CPU での実行に費やした時間。
Thrown Exceptions (v2.31+)
各メソッドによって発生したキャッチまたはキャッチされない例外の数、およびその種類とメッセージ。
Allocations (ベータ版、v2.18+)
各メソッドで割り当てられたオブジェクトの数、サイズ、およびそのタイプ。
必要なもの: .NET 6+
Lock (v2.49+)
The number of times threads are waiting for a lock and for how long.
Requires: beta .NET Framework (requires Datadog Agent 7.51+) / .NET 5+
Live Heap (ベータ版、v2.22+)
割り当てられたオブジェクトのサブセット (クラス名付き) で、メモリ内に残っているもの。
必要なもの: .NET 7+

プロファイリングを有効にすると、サポートされている PHP バージョンについて、以下のプロファイルタイプが収集されます。

Wall Time
各関数が使用した経過時間。経過時間には、コードが CPU で実行されている時間、I/O を待機している時間、および関数の実行中に発生するその他の時間が含まれます。
CPU
各関数が CPU での実行に費やした時間を示します。
Allocations (v0.88+)
プロファイリング期間中 (デフォルト: 67 秒) に各関数が行ったアロケーションの数 (その後に解放されたアロケーションを含む)。スタックのアロケーションは追跡されません。
注: PHP 8.0.0-8.1.20 および 8.2.0-8.2.7 で JIT が有効になっている場合は利用できません
Allocated memory (v0.88+)
プロファイリング期間中 (デフォルト: 67 秒) に各関数が割り当てたヒープメモリの量 (その後に解放されたアロケーションを含む)。スタックのアロケーションは追跡されません。
注: PHP 8.0.0-8.1.20 および 8.2.0-8.2.7 で JIT が有効になっている場合は利用できません
Thrown Exceptions (v0.92+)
各メソッドによって発生したキャッチされたまたはされなかった例外の数、およびその種類。

プロファイリングを有効にすると、サポートされている言語とバージョンについて、以下のプロファイルタイプが収集されます。

CPU
各関数が CPU での実行に費やした時間。
Allocations
プロファイリング期間中 (デフォルト: 59 秒) に各関数が行った割り当て数 (その後に解放された割り当てを含む)。スタックの割り当ては追跡されません。
Allocated memory
プロファイリング期間中 (デフォルト: 59 秒) に各関数が割り当てたヒープメモリの量 (その後に解放された割り当て分も含む)。スタックの割り当ては追跡されません。

その他の参考資料