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

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

CPU
各メソッドが CPU 上で実行に費やした時間。これには JVM 内で実行されるコード (Java、Kotlin など) が含まれますが、JVM 操作や JVM 内から呼び出されるネイティブコードは含まれません。
Allocations
各メソッドによって行われたヒープ割り当ての数 (その後に解放された割り当てを含む)。
要件: Java 11
Allocated Memory
各メソッドによって割り当てられたヒープメモリの量 (その後に解放された割り当てを含む)。
要件: Java 11
Live Heap (v1.61.0 以降)
各メソッドによって割り当てられ、まだガベージコレクションされていないオブジェクトとメモリ。これは、サービス全体のメモリ使用量を調査し、潜在的なメモリリークを特定するのに役立ちます。プロファイラーは、お使いの JVM バージョンで利用可能な最も正確なエンジンを自動的に使用します。
_Java 11+ が必要です: _
Wall Time
各メソッドの経過時間。経過時間には、コードが CPU で実行されている時間、I/O を待機している時間、およびメソッドの実行中に発生するその他すべての時間が含まれます。
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
各関数が CPU で実行された時間 (Python コードおよびネイティブコードを含む)。
要件: Python 2.7+、POSIX プラットフォーム
Heap Live Size
各関数によって割り当てられ、まだガベージコレクションされていないヒープメモリの量。これは、サービス全体のメモリ使用量を調査し、潜在的なメモリリークを特定するのに役立ちます。
要件: Python 3.5+
Allocated Memory
各関数によって割り当てられたヒープメモリの量 (その後に解放された割り当てを含む)。
要件: Python 3.5+
Allocations
各関数によって行われたヒープ割り当ての数 (その後に解放された割り当てを含む)。
要件: Python 3.5+

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

CPU Time
各関数が CPU で実行されていた時間。ネットワーク、チャネル、ミューテックス、スリープなどの待機によるオフ CPU 時間は、このプロファイルには記録されません。Mutex および Block プロファイルを参照してください。
Allocations
プロファイリング期間 (デフォルト: 60 秒) 中に各関数によってヒープメモリに割り当てられたオブジェクトの数 (その後に解放された割り当てを含む)。Go ではこれを alloc_objects と呼びます。スタック割り当ては追跡されません。これはガベージコレクションの負荷を調査するのに役立ちます。この測定値がバージョン 1.33.0 でどのように変化するかについての注記も、Delta プロファイルで参照してください。
Allocated Memory
プロファイリング期間 (デフォルト: 60 秒) 中に各関数によって割り当てられたヒープメモリの量 (その後に解放された割り当てを含む)。Go ではこれを alloc_space と呼びます。スタック割り当ては追跡されません。これはガベージコレクションの負荷を調査するのに役立ちます。この測定値がバージョン 1.33.0 でどのように変化するかについての注記も、Delta プロファイルで参照してください。
Heap Live Objects
ガベージコレクション後も使用されている、各関数によってヒープメモリに割り当てられたオブジェクトの数。Go ではこれを inuse_objects と呼びます。これは、サービス全体のメモリ使用量を調査し、潜在的なメモリリークを特定するのに役立ちます。
Heap Live Size
これは、ガベージコレクション後も使用されている、各関数によって割り当てられたヒープメモリの量です。デフォルト設定 (GOGC=100) では、これは通常、プロセスの RSS 使用量の約 50% に相当します。Go ではこれを inuse_space と呼びます。このメトリクスを使用してメモリ消費量を確認し、リークを診断してください。Go がどのようにメモリを管理するかについての詳細は、Go メモリメトリクスの仕組みを解き明かすおよび Go ガベージコレクターガイドを参照してください。
Mutex
プロファイリング期間中に、関数が Mutex で待機していた時間 (デフォルト: 60 秒)。このプロファイルのスタックトレースは、Mutex でブロックされていた別のゴルーチンの処理を進めた Unlock() 操作を指します。スピンロックを使用した短時間の Mutex 競合はこのプロファイルでは取得されませんが、CPU プロファイルで確認できます。この測定値がバージョン 1.33.0 でどのように変化するかについての注記も、Delta プロファイルで参照してください。
Block
プロファイリング期間中、各関数が Mutex やチャネル操作で待機していた時間 (デフォルト: 60 秒)。スリープ、GC、ネットワーク、およびシステムコール操作はこのプロファイルでは取得されません。ブロック操作はブロック解除後にのみ取得されるため、このプロファイルを使用して、停止しているように見えるアプリケーションのデバッグを行うことはできません。Mutex 競合の場合、このプロファイルのスタックトレースは、ブロックされた Lock() 操作を指します。これはプログラムのどこでブロックが発生しているかを示し、Mutex プロファイルはプログラムのどの部分が競合を引き起こしているかを示します。詳細については、Datadog の Go における Block プロファイリングの調査を参照してください。この測定値がバージョン 1.33.0 でどのように変化するかについての注記も、Delta プロファイルで参照してください。注: Block プロファイラーは、本番環境のワークロードで顕著なオーバーヘッドを引き起こす可能性があります。本番環境で有効にする場合は、高いレート (100 ミリ秒である 100000000 など) を優先し、レイテンシや CPU 使用率の増加の兆候がないか確認してください。
Goroutines
現在同じ関数を実行している (CPU 上および CPU 外で待機中の両方の) goroutines の数のスナップショット。スナップショット間で goroutines の数が増加している場合、プログラムが goroutines をリークしている可能性があります。ほとんどの健全なアプリケーションでは、このプロファイルはワーカープールとそれらが使用する goroutines の数によって占められています。極めてレイテンシに敏感で、多数の goroutines (> 10,000) を使用するアプリケーションでは、このプロファイルを有効にすると stop-the-world ポーズが発生することに注意してください。ポーズはプロファイリング期間 (デフォルト 60 秒) ごとに 1 回のみ発生し、通常は goroutines あたり約 1µsec 続きます。p99 レイテンシ SLO が約 100ms の一般的なアプリケーションでは、通常、この警告を無視できます。詳細については、Datadog の Go での goroutines プロファイリングに関する調査を参照してください。

Delta プロファイル

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

プロファイラーのバージョン 1.37.0以降では、Delta プロファイルが有効な場合、アップロード帯域幅の使用量を削減するために累積プロファイルはアップロードされなくなります。完全な累積プロファイルに依存している場合は、サポートにお問い合わせの上、ユースケースについてご相談ください。

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

CPU
Ruby およびネイティブコードを含め、各関数が CPU 上の実行に費やした時間。
Wall Time
各関数の経過時間。経過時間には、コードが CPU 上で実行されている時間、I/O 待ちの時間、および関数が実行されている間に発生するその他のすべての時間が含まれます。
Allocations (v2.3.0 以降)
プロファイリング期間 (デフォルト: : 60 秒) 中に各メソッドによって割り当てられたオブジェクトの数 (その後解放された割り当てを含む)。これはガベージコレクションの負荷を調査するのに役立ちます。
要件: 手動有効化
Heap Live Objects (プレビュー、v2.18.0 以降)
各メソッドによってヒープメモリに割り当てられ、まだガベージコレクションされていないオブジェクトの数。これは、サービス全体のメモリ使用量を調査し、潜在的なメモリリークを特定するのに役立ちます。
_要件: Ruby 3.1 以降_および手動有効化
Heap Live Size (プレビュー、v2.18.0 以降)
各メソッドによって割り当てられ、まだガベージコレクションされていないヒープメモリの量。これは、サービス全体のメモリ使用量を調査し、潜在的なメモリリークを特定するのに役立ちます。
_要件: Ruby 3.1 以降 _ および手動有効化 (現在 Ruby 4 とは互換性がありません)
GVL プロファイリング (Timeline 内) (v2.11.0 以降)
バックグラウンドスレッドを含む、他の「ノイジーネイバー」スレッドによってスレッドの動作が妨げられた時間を記録します。これは、タイムラインの可視化を使用する際にアプリケーションのレイテンシスパイクを調査するのに役立ちます。
_要件: Ruby 3.2 以降 _

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

CPU
JavaScript およびネイティブコードを含む、各関数が CPU 上で実行されていた時間。
CPU プロファイリングは Linux および macOS で利用可能です。この機能は Windows では利用できません。
Wall Time
各関数の経過時間。経過時間には、コードが CPU 上で実行されている時間、I/O 待ちの時間、および関数が実行されている間に発生するその他のすべての時間が含まれます。
Heap Live Objects
各関数によってヒープメモリに割り当てられ、まだガベージコレクションされていないオブジェクトの数。これは、サービス全体のメモリ使用量を調査し、潜在的なメモリリークを特定するのに役立ちます。
Heap Live Size
各関数によって割り当てられ、まだガベージコレクションされていないヒープメモリの量。これは、サービス全体のメモリ使用量を調査し、潜在的なメモリリークを特定するのに役立ちます。
Heap Live Size プロファイルにおける深いスタックトレースは 64 フレームに切り詰められます。
Allocated Memory (プレビュー)
各関数によって割り当てられたヒープメモリの量 (その後に解放された割り当てを含む)。
要件: Node.js 26 以降および DD_PROFILING_ALLOCATION_ENABLED=true
Allocations (プレビュー)
各関数によって行われたヒープ割り当ての数 (その後に解放された割り当てを含む)。
要件: Node.js 26 以降および DD_PROFILING_ALLOCATION_ENABLED=true

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

Wall Time
マネージドメソッドで費やされた経過時間。経過時間には、コードが CPU で実行されている時間、I/O を待機している時間、およびメソッドの実行中に発生するその他すべての時間が含まれます。
CPU (v2.15 以降)
各メソッドが CPU 上で実行に費やした時間。
Thrown Exceptions (v2.31 以降)
各メソッドによって発生したキャッチ済みまたは未キャッチの例外の数、およびその型とメッセージ。
Allocations (v3.28 以降)
各メソッドによって割り当てられたオブジェクトの数とサイズ、およびその型。 .NET Framework の場合、サイズは利用できません。
_要件: .NET Framework (Datadog Agent 7.51 以降および v3.2 以降が必要) / .NET 6 以降。ただし、より正確なサンプリングのために Datadog は .NET 10 以降を推奨しています。
Lock (v2.49 以降)
スレッドがロックを待機している回数と、その待機時間。
要件: .NET Framework (Datadog Agent 7.51 以降が必要) / .NET 5 以降
Live Heap (v3.28 以降)
メモリ内に保持されている割り当て済みオブジェクトのサブセット (クラス名を含む)。
_要件: .NET 7 以降。ただし、より正確なサンプリングのために Datadog は .NET 10 以降を推奨しています。
Outgoing HTTP requests (Timeline 内) (プレビュー、v3.19 以降)
送信 HTTP リクエストの開始と終了。各フェーズ (DNS、セキュリティハンドシェイク、ソケット、リクエスト/レスポンス) の所要時間と、予期しないリダイレクトの可能性を表示します。
要件: .NET 7 以降
Thread lifetime (Timeline 内) (v3.19 以降)
スレッドのライフタイムの開始と終了。ThreadPool の枯渇や短命なスレッドを容易に検出できます。
要件: .NET Framework (Datadog Agent 7.51 以降および v3.2 以降が必要) / .NET 5 以降
Garbage Collector CPU consumption (v3.19 以降)
ガベージコレクターのスレッドが CPU 上で実行されていた時間。
要件: .NET Framework (Datadog Agent 7.51 以降および v3.2 以降が必要) / .NET 5 以降

注: .NET 10 より前では、.NET ランタイムで使用されるサンプリングアルゴリズムにより、Allocations および Live Heap のプロファイリングで小さなオブジェクトよりも大きなオブジェクトが多く表示される場合があります。Datadog では、より統計的に正確な結果を得るために .NET 10 以降の使用を推奨しています。

プロファイリングが有効になると、サポートされている 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 以降)
各メソッドによって発生したキャッチ済みまたは未キャッチの例外の数、およびその型。
File I/O (プレビュー、v1.7.2 以降)
各メソッドがファイルの読み書きに費やした時間、およびファイルから読み書きされたバイト数。
Socket I/O (プレビュー、v1.7.2 以降)
各メソッドがソケットの読み書きに費やした時間、およびソケットから読み書きされたバイト数。

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

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

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

CPU Time (eBPF)
各メソッドまたは関数が CPU 上で実行されていた時間。マルチスレッドプログラムでは、CPU 時間が経過時間よりも長くなることがあります。たとえば、2 つのスレッドがそれぞれ 45 秒間実行されている場合、「eBPF CPU 時間、1分あたり 1 分 30 秒」と表示されます。

参考資料