New Relicの.NETAgentは、アプリケーションのパフォーマンスに関するメトリックを.NETランタイムから収集します。これらのメトリックは、アプリケーションが消費するCPUとメモリの量、およびガベージコレクションとスレッドプールリソースの競合によってアプリケーションのパフォーマンスがどのように影響を受けるかについての洞察を提供できます。
.NETパフォーマンスメトリクスの完全なスイートは、.NETAgentバージョン8.20以降で利用できます。
これらのメトリクスは、 one.newrelic.com > All capabilities > APM & servicesで確認できます。アプリケーションを選択し、 More views > Dotnet VMsに移動します。
これらのメトリクスは、次の方法でも表示できます。
- カスタム ダッシュボードの作成。
- one.newrelic.com で Metric Explorer を使用し 、[すべての機能] > [APM とサービス] > アプリケーションを選択し、 [その他のビュー]に移動します。
CPUメトリック
以下のCPU Metricsが収集されます。
- CPU/User/Utilization
このプロセスで消費されたCPUの割合。 - CPU/User Time
プロセスがアプリケーションコードを実行するのに費やした時間です。
メモリメトリック
以下のMemory Metricsが収集されます。
- Memory/Physical
プロセスに割り当てられているプライベート(物理)メモリの量(MB)。 - Memory/WorkingSet
プロセスに割り当てられた物理メモリの量。
ガベージコレクションのメトリック
.NETガベージコレクタはバックグラウンドで実行され、アプリケーションによって参照されなくなったオブジェクトに関連付けられたメモリを識別して再利用します。次のメトリックは、オブジェクト割り当てのパターンと潜在的な過剰割り当てシナリオを特定するのに役立つ場合があります。この記事では、.NETでのガベージコレクションの基本についてさらに説明します。
ヒント
ガベージコレクションの測定値は以下の通りです。
- .NETFrameworkのすべてのバージョン
- .NETCore3.0以降。
重要
.NET Frameworkアプリケーションの場合、アプリケーションを実行するWindowsユーザーは、Windowsパフォーマンスカウンターデータにアクセスできる必要があります。通常、これは、ユーザーを「パフォーマンスモニターユーザー」および「パフォーマンスログユーザー」グループに追加することによって実現されます。アクセス許可が不十分な場合、エージェントはガベージコレクションメトリックを収集しません。
全体的な指標
さらに、以下のガーベッジコレクションメトリクスが収集されます。
- GC/Handles
オブジェクトへの参照の数です。 - GC/誘導
通常、ランタイムはガベージコレクションを自動的に実行します。このメトリックは、アプリケーションコード内からGC.Collect
への明示的な呼び出しによってガベージコレクションが手動で呼び出された回数を識別します。 - GC/PercentTimeInGC (.NET Frameworkのみ)
最後のガベージコレクションサイクル以降、.NETランタイムがガベージコレクションの実行に費やした経過時間の割合。
世代-0ヒープ
以下のGC Gen0のメトリクスが収集されます。
- GC/Gen0/Size
第0世代で 利用可能な 割り当て可能なメモリの量(MB)。これは、第0世代で 利用されている メモリの量を示すものではなく、割り当て可能な最大値を示すものです。 - GC/Gen0/Promoted
ガベージコレクションに耐え、Gen0からGen1に昇格したメモリの量(MB)。メモリは、アクティブな参照がある場合、ガベージコレクションに耐えます。 - GC/Gen0/Collections
ガベージコレクタが実行したGeneration 0 Garbage Collectionの回数。
世代-1ヒープ
以下のGC Gen1メトリクスが収集されます。
- GC/Gen1/Size
第 1 世代のヒープで 使用されているメモリの量(MB) 。これは、第0世代のヒープで 利用可能な メモリの最大量を測定する「Gen0/Size」とは異なります。 - GC/Gen1/Promoted
ガベージコレクションに耐え、Gen1からGen2に昇格したメモリの量(MB)。メモリは、アクティブな参照がある場合、ガベージコレクションに耐えます。 - GC/Gen1/Collections
ガベージコレクタで実行されたGeneration 1 Garbage Collectionの回数です。
世代-2ヒープ
以下のGC Gen2メトリクスが収集されます。
- GC/Gen2/Size
Gen2 ヒープが 使用しているメモリの量(MB) 。 - GC/Gen2/Survived (.NET Coreのみ)
ガベージコレクションで存続したメモリの量(MB単位)。メモリへのアクティブな参照がある場合、メモリはガベージコレクションを存続します。 Gen0およびGen1とは異なり、ガベージコレクションを存続させるメモリはプロモートされません。 - GC/Gen2/Collections
ガベージコレクタが実行したGeneration 2 Garbage Collectionの回数。
ラージオブジェクトヒープ(LOH)
以下のGC LOHメトリクスが収集されます。
- GC /LOH/サイズ
ラージオブジェクトヒープ(LOH)によって使用されているメモリの量(MB単位)。 .NET Coreでは、ラージオブジェクトヒープはGen3と呼ばれることもあります。 - GC/LOH/Survived (.NET Coreのみ)ガベージコレクションを生き残ったメモリの量(MB単位)。メモリへのアクティブな参照がある場合、メモリはガベージコレクションを存続します。 Gen0およびGen1とは異なり、ガベージコレクションを存続させるメモリはプロモートされません。
管理されたスレッドプールのメトリック
.NETランタイムは、スレッドのプールを管理します。次のメトリックは、スレッドプールの観点からアプリケーションのパフォーマンスを可視化し、スレッドプールが不足している領域を特定するのに役立つ場合があります。スレッドプールの枯渇/競合は、アプリケーションによって行われた要求を処理するために使用できる十分なスレッドがない場合に発生します。次の記事では、管理対象スレッドプールのさまざまな機能について説明します。これらのメトリックには、スレッドプールによって管理されていないスレッドに関する情報は含まれていないことに注意してください。
ワーカースレッド
ワーカースレッドは、プロセスに代わって作業を行うために採用される、CPUに拘束されたスレッドです。
- Threadpool/Worker/Available
プロセスで利用可能な管理対象スレッドの数を特定します。常に低い数値で推移している場合は、飢餓状態の可能性があります。 - Threadpool/Worker/InUse
プロセスが現在使用しているワーカースレッドの数を示します。
完了スレッド
I/Oスレッドとも呼ばれる完了スレッドは、I/Oオペレーションの完了を監視するために採用されます。
- Threadpool/Completion/Available
このメトリックは、プロセスで現在利用可能なスレッドの数を識別します。一貫して低い数値は、飢餓状態の可能性を示します。 - Threadpool/Completion/InUse
このメトリックは、プロセスが現在使用している完了スレッドの数を特定します。
スループット
スループットメトリクスは、別のスレッドで実行が要求された作業量、開始された作業量、スレッドプールのリソースが利用可能になるのを待っている作業量を測定します。