.NET ランタイム メトリック
この記事では、 System.Diagnostics.Metrics API を使用して生成される .NET ランタイム ライブラリの組み込みメトリックについて説明します。 以前の EventCounters API に基づくメトリックの一覧については、「使用可能なカウンター」をご覧ください。
ヒント
これらのメトリックを収集して報告する方法の詳細については、「 Collecting Metrics」を参照してください。
System.Runtime
System.Runtime
メーターは、.NET ランタイムの GC、JIT、AssemblyLoader、Threadpool、および例外処理部分からの測定値と、OS からの CPU とメモリのメトリックを報告します。 これらのメトリックは、すべての .NET アプリで自動的に使用できます。
メトリック: dotnet.process.cpu.time
名前 | インストルメントの種類 | 単位 (UCUM) | 説明 |
---|---|---|---|
dotnet.process.cpu.time |
カウンタ | s |
プロセスによって使用される CPU 時間。 |
属性 | Type | 説明 | 例 | プレゼンス |
---|---|---|---|---|
cpu.mode |
string | CPU のモード。 | user ; system |
常時 |
このメトリックは、現在のプロセスの System.Diagnostics.Process のプロセッサ時間プロパティにアクセスする場合と同じ値を報告します。 system
モードはPrivilegedProcessorTimeに対応し、user
モードはUserProcessorTime
.NET 9.0 以降で使用できます。
メトリック: dotnet.process.memory.working_set
名前 | インストルメントの種類 | 単位 (UCUM) | 説明 |
---|---|---|---|
dotnet.process.memory.working_set |
UpDownCounter | By |
プロセス コンテキストにマップされた物理メモリのバイト数。 |
このメトリックは、 Environment.WorkingSet プロパティの呼び出しと同じ値を報告します。
.NET 9.0 以降で使用できます。
メトリック: dotnet.gc.collections
名前 | インストルメントの種類 | 単位 (UCUM) | 説明 |
---|---|---|---|
dotnet.gc.collections |
カウンタ | {collection} |
プロセスが開始されてから発生したガベージ コレクションの数。 |
属性 | Type | 説明 | 例 | プレゼンス |
---|---|---|---|---|
dotnet.gc.heap.generation |
string | 収集される最大マネージド ヒープ生成の名前。 | gen0 ; gen1 ; gen2 |
常時 |
.NET GC は世代別ガベージ コレクターです。 ガベージ コレクターを実行するたびに、ヒューリスティックを使用して最大世代を選択し、選択した最大まですべての世代のオブジェクトを収集します。 たとえば、 gen1
コレクションは、ジェネレーション 0 と 1 のすべてのオブジェクトを収集します。 gen2
コレクションは、ジェネレーション 0、1、および 2 のすべてのオブジェクトを収集します。 .NET GC と世代別ガベージ コレクションの詳細については、 .NET ガベージ コレクション ガイドを参照してください。
.NET 9.0 以降で使用できます。
メトリック: dotnet.gc.heap.total_allocated
名前 | インストルメントの種類 | 単位 (UCUM) | 説明 |
---|---|---|---|
dotnet.gc.heap.total_allocated |
カウンタ | By |
approximateプロセスの開始以降にマネージド GC ヒープに割り当てられたバイト数。 返される値には、ネイティブ割り当ては含まれません。 |
このメトリックは、 GC.GetTotalAllocatedBytesの呼び出しと同じ値を報告します。 .NET GC の詳細については、 .NET ガベージ コレクション ガイドを参照してください。
.NET 9.0 以降で使用できます。
メトリック: dotnet.gc.last_collection.memory.committed_size
名前 | インストルメントの種類 | 単位 (UCUM) | 説明 |
---|---|---|---|
dotnet.gc.last_collection.memory.committed_size |
UpDownCounter | By |
最新のガベージ コレクション中に観察された、.NET GC によって使用されているコミット済み仮想メモリの量。 |
このメトリックは、 GCMemoryInfo.TotalCommittedBytesの呼び出しと同じ値を報告します。 コミットされた仮想メモリは、既存のオブジェクトを格納するためのメモリ (ヒープ サイズ) と、今後新しく割り当てられたオブジェクトを処理する準備ができている追加メモリの両方が含まれているため、ヒープ サイズよりも大きくなる可能性があります。 .NET GC の詳細については、 .NET ガベージ コレクション ガイドを参照してください。
.NET 9.0 以降で使用できます。
メトリック: dotnet.gc.last_collection.heap.size
名前 | インストルメントの種類 | 単位 (UCUM) | 説明 |
---|---|---|---|
dotnet.gc.last_collection.heap.size |
UpDownCounter | By |
最新のガベージ コレクション中に観察されたマネージド GC ヒープ サイズ (断片化を含む)。 |
属性 | Type | 説明 | 例 | プレゼンス |
---|---|---|---|---|
dotnet.gc.heap.generation |
string | ガベージ コレクターのマネージド ヒープ生成の名前。 | gen0 ; gen1 ; gen2 ;loh ;poh |
常時 |
.NET GC は、ヒープを世代に分割します。 標準の番号付き世代に加えて、GC は、いくつかのオブジェクトを 2 つの特殊な世代に配置します。
- ラージ オブジェクト ヒープ (LOH) には、一般的なオブジェクトと比較して非常に大きい .NET オブジェクトが格納されます。
- 固定オブジェクト ヒープ (POH) は、
pinned
パラメーターが true の場合に、GC.AllocateArray API を使用して割り当てられたオブジェクトを格納します。
これらの特殊な世代はどちらも、 gen2
GC コレクション中に収集されます。 .NET GC の詳細については、 .NET ガベージ コレクション ガイドを参照してください。
.NET 9.0 以降で使用できます。
メトリック: dotnet.gc.last_collection.heap.fragmentation.size
名前 | インストルメントの種類 | 単位 (UCUM) | 説明 |
---|---|---|---|
dotnet.gc.last_collection.heap.fragmentation.size |
UpDownCounter | By |
最新のガベージ コレクション中に観察されたヒープの断片化。 |
このメトリックは、 GCGenerationInfo.FragmentationAfterBytesの呼び出しと同じ値を報告します。
.NET オブジェクトが割り当てられると、最初はメモリ内で連続してレイアウトされる傾向があります。 ただし、これらのオブジェクトの一部が後で GC によって収集されると、残っているライブ オブジェクト間に未使用のメモリのギャップが作成されます。 これらのギャップは、オブジェクトの格納に現在使用されていない GC ヒープの部分 (多くの場合、"断片化" と呼ばれます) を表します。GC は、オブジェクト サイズがギャップのいずれかに収まるのに十分小さい場合に、新しいオブジェクト割り当てのために将来断片化バイトを再利用できます。 GC は、オブジェクトが固定されていない限り、残りのライブ オブジェクトを相互に移動する特別な圧縮ガベージ コレクションを実行することもできます。
.NET GC のしくみ、GC パフォーマンスの分析、断片化が果たす役割の詳細については、「 .NET メモリ パフォーマンス分析を参照してください。
.NET 9.0 以降で使用できます。
メトリック: dotnet.gc.pause.time
名前 | インストルメントの種類 | 単位 (UCUM) | 説明 |
---|---|---|---|
dotnet.gc.pause.time |
カウンタ | s |
プロセスの開始後に GC で一時停止した合計時間。 |
このメトリックは、 GC.GetTotalPauseDuration()の呼び出しと同じ値を報告します。
.NET GC がコレクションを実行するたびに、マネージド コードを実行しているすべてのスレッドを一時的に一時停止して、どのオブジェクトがまだ参照されているかを判断する必要があります。 このメトリックは、プロセスが開始されてからのすべての一時停止時間の合計を報告します。 このメトリックを使用して、スレッドが GC に対して一時停止した時間とマネージド コードを実行できる時間の割合を判断できます。
.NET 9.0 以降で使用できます。
メトリック: dotnet.jit.compiled_il.size
名前 | インストルメントの種類 | 単位 (UCUM) | 説明 |
---|---|---|---|
dotnet.jit.compiled_il.size |
カウンタ | By |
プロセスの開始後にコンパイルされた中間言語のバイト数。 |
このメトリックは、 JitInfo.GetCompiledILBytesの呼び出しと同じ値を報告します。
.NET アプリをビルドすると、マネージド コードは最初に C#、VB、F# などの高度な言語から Intermediate 言語 (IL) にコンパイルされます。 その後、プログラムが実行されると、.NET Just-In-Time (JIT) コンパイラによって IL がマシン コードに変換されます。
JIT コンパイルはメソッドの初回実行時に発生するため、ほとんどの JIT コンパイルはアプリケーションの起動時に発生する傾向があります。 JIT コンパイルされる IL の量を減らすと、アプリケーションの起動時間が短縮されます。
.NET 9.0 以降で使用できます。
メトリック: dotnet.jit.compiled_methods
名前 | インストルメントの種類 | 単位 (UCUM) | 説明 |
---|---|---|---|
dotnet.jit.compiled_methods |
カウンタ | {method} |
プロセスが開始されてから JIT コンパイラ (再コンパイル) メソッドがコンパイルされた回数。 |
このメトリックは、 JitInfo.GetCompiledMethodCountの呼び出しと同じ値を報告します。
.NET アプリをビルドすると、マネージド コードは最初に C#、VB、F# などの高度な言語から Intermediate 言語 (IL) にコンパイルされます。 その後、プログラムが実行されると、.NET Just-In-Time (JIT) コンパイラによって IL がマシン コードに変換されます。
JIT コンパイルはメソッドの初回実行時に発生するため、ほとんどの JIT コンパイルはアプリケーションの起動時に発生する傾向があります。 JIT コンパイルが必要なメソッドの数を減らすと、アプリケーションの起動時間が短縮されます。
.NET 9.0 以降で使用できます。
メトリック: dotnet.jit.compilation.time
名前 | インストルメントの種類 | 単位 (UCUM) | 説明 |
---|---|---|---|
dotnet.jit.compilation.time |
カウンタ | s |
JIT コンパイラがプロセスの開始後にメソッドのコンパイルに費やした時間。 |
このメトリックは、 JitInfo.GetCompilationTimeの呼び出しと同じ値を報告します。
.NET アプリをビルドすると、マネージド コードは最初に C#、VB、F# などの高度な言語から Intermediate 言語 (IL) にコンパイルされます。 その後、プログラムが実行されると、.NET Just-In-Time (JIT) コンパイラによって IL がマシン コードに変換されます。
JIT コンパイルはメソッドの初回実行時に発生するため、ほとんどの JIT コンパイルはアプリケーションの起動時に発生する傾向があります。 JIT コンパイルに費やされる時間を短縮すると、アプリケーションの起動時間が短縮されます。
.NET 9.0 以降で使用できます。
メトリック: dotnet.thread_pool.thread.count
名前 | インストルメントの種類 | 単位 (UCUM) | 説明 |
---|---|---|---|
dotnet.thread_pool.thread.count |
UpDownCounter | {thread} |
現在存在するスレッド プール スレッドの数。 |
このメトリックは、 ThreadPool.ThreadCountの呼び出しと同じ値を報告します。
.NET では、 thread プール を使用して、作業項目を他のスレッドにスケジュールします。 このメトリックは、そのスレッド プールによって現在管理されているワーカー スレッドの数を提供します。
.NET 9.0 以降で使用できます。
メトリック: dotnet.thread_pool.work_item.count
名前 | インストルメントの種類 | 単位 (UCUM) | 説明 |
---|---|---|---|
dotnet.thread_pool.work_item.count |
カウンタ | {work_item} |
プロセスの開始後にスレッド プールが完了した作業項目の数。 |
このメトリックは、 ThreadPool.CompletedWorkItemCountの呼び出しと同じ値を報告します。
.NET では、 thread プール を使用して、作業項目を他のスレッドにスケジュールします。 このメトリックは、スレッド プール スレッドによって実行された作業項目の数を提供します。
.NET 9.0 以降で使用できます。
メトリック: dotnet.thread_pool.queue.length
名前 | インストルメントの種類 | 単位 (UCUM) | 説明 |
---|---|---|---|
dotnet.thread_pool.queue.length |
UpDownCounter | {work_item} |
スレッド プールによって処理される現在キューに登録されている作業項目の数。 |
このメトリックは、 ThreadPool.PendingWorkItemCountの呼び出しと同じ値を報告します。
.NET では、 thread プール を使用して、作業項目を他のスレッドにスケジュールします。 このメトリックは、スレッド プール スレッドの 1 つによって実行される現在キューに登録されている作業項目の数を提供します。
.NET 9.0 以降で使用できます。
メトリック: dotnet.monitor.lock_contentions
名前 | インストルメントの種類 | 単位 (UCUM) | 説明 |
---|---|---|---|
dotnet.monitor.lock_contentions |
カウンタ | {contention} |
プロセスの開始後にモニター ロックを取得しようとしたときに競合が発生した回数。 |
このメトリックは、 Monitor.LockContentionCountの呼び出しと同じ値を報告します。
.NET では、 Monitor.Enter などの API または lock ステートメントを使用して、マネージド オブジェクトをロックとして使用できます。 あるスレッドが既にロックを保持していて、2 番目のスレッドがロックを取得しようとしている場合、これは lock 競合と呼ばれます。
.NET 9.0 以降で使用できます。
メトリック: dotnet.timer.count
名前 | インストルメントの種類 | 単位 (UCUM) | 説明 |
---|---|---|---|
dotnet.timer.count |
UpDownCounter | {timer} |
現在アクティブなタイマー インスタンスの数。 |
このメトリックは、 Timer.ActiveCountの呼び出しと同じ値を報告します。
.NET 9.0 以降で使用できます。
メトリック: dotnet.assembly.count
名前 | インストルメントの種類 | 単位 (UCUM) | 説明 |
---|---|---|---|
dotnet.assembly.count |
UpDownCounter | {assembly} |
現在読み込まれている .NET アセンブリの数。 |
このメトリックは、 AppDomain.GetAssemblies() を呼び出し、返された配列の長さを確認するのと同じ値を報告します。
.NET 9.0 以降で使用できます。
メトリック: dotnet.exceptions
名前 | インストルメントの種類 | 単位 (UCUM) | 説明 |
---|---|---|---|
dotnet.exceptions |
カウンタ | {exception} |
マネージド コードでスローされた例外の数。 |
属性 | Type | 説明 | 例 | プレゼンス |
---|---|---|---|---|
error.type |
string | スローされた例外の種類。 | System.OperationCanceledException ; Contoso.MyException |
Required |
このメトリックは、 AppDomain.FirstChanceException イベントの呼び出しのカウントと同じ値を報告します。
.NET 9.0 以降で使用できます。
.NET