다음을 통해 공유


.NET 런타임 메트릭

이 문서에서는 API를 사용하여 생성되는 .NET 런타임 라이브러리에 대한 기본 제공 메트릭을 System.Diagnostics.Metrics 설명합니다. 이전 EventCounters API를 기반으로 하는 메트릭 목록은 사용 가능한 카운터를 참조하세요.

이러한 메트릭을 수집하고 보고하는 방법에 대한 자세한 내용은 메트릭 수집을 참조 하세요.

System.Runtime

미터는 System.Runtime .NET 런타임의 GC, JIT, AssemblyLoader, Threadpool 및 예외 처리 부분과 OS의 일부 CPU 및 메모리 메트릭의 측정값을 보고합니다. 이러한 메트릭은 모든 .NET 앱에 대해 자동으로 사용할 수 있습니다.

메트릭: dotnet.process.cpu.time
이름 계측 유형 단위(UCUM) 설명
dotnet.process.cpu.time 카운터 s 프로세스에서 사용하는 CPU 시간입니다.
attribute Type 설명 예제 현재 상태
cpu.mode string CPU의 모드입니다. user; system Always

이 메트릭은 현재 프로세스에 대한 프로세서 시간 속성에 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} 프로세스가 시작된 이후 발생한 가비지 컬렉션의 수입니다.
attribute Type 설명 예제 현재 상태
dotnet.gc.heap.generation string 수집되는 최대 관리되는 힙 생성의 이름입니다. gen0; gen1; gen2 Always

.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 프로세스가 시작된 이후 관리되는 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 힙 크기(조각화 포함)입니다.
attribute Type 설명 예제 현재 상태
dotnet.gc.heap.generation string 가비지 수집기 관리되는 힙 생성의 이름입니다. gen0; gen1; gen2;loh;poh Always

.NET GC는 힙을 세대로 나눕니다. GC는 표준 번호 매기기 세대 외에도 일부 개체를 두 개의 특수 세대로 배치합니다.

  • LOH(큰 개체 힙)는 일반적인 개체에 비해 매우 큰 .NET 개체를 저장합니다.
  • 고정된 POH(개체 힙)는 매개 변수가 true일 때 API를 GC.AllocateArray 사용하여 할당된 개체를 pinned 저장합니다.

이러한 특수 세대는 모두 GC 컬렉션 중에 gen2 수집됩니다. .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#과 같은 상위 수준 언어에서 IL(중간 언어)로 컴파일됩니다. 그런 다음 프로그램이 실행되면 .NET JIT(Just-In-Time) 컴파일러가 IL을 머신 코드로 변환합니다.

JIT 컴파일은 메서드를 처음 실행할 때 발생하므로 대부분의 JIT 컴파일은 애플리케이션을 시작하는 동안 발생하는 경향이 있습니다. JIT 컴파일되는 IL의 양을 줄이면 애플리케이션 시작 시간이 단축될 수 있습니다.

.NET 9.0부터 사용할 수 있습니다.

메트릭: dotnet.jit.compiled_methods
이름 계측 유형 단위(UCUM) 설명
dotnet.jit.compiled_methods 카운터 {method} 프로세스가 시작된 이후 JIT 컴파일러(re)가 메서드를 컴파일한 횟수입니다.

이 메트릭은 호출 JitInfo.GetCompiledMethodCount과 동일한 값을 보고합니다.

.NET 앱을 빌드할 때 관리 코드는 처음에 C#, VB 또는 F#과 같은 상위 수준 언어에서 IL(중간 언어)로 컴파일됩니다. 그런 다음 프로그램이 실행되면 .NET JIT(Just-In-Time) 컴파일러가 IL을 머신 코드로 변환합니다.

JIT 컴파일은 메서드를 처음 실행할 때 발생하므로 대부분의 JIT 컴파일은 애플리케이션을 시작하는 동안 발생하는 경향이 있습니다. JIT를 컴파일해야 하는 메서드 수를 줄이면 애플리케이션 시작 시간이 단축될 수 있습니다.

.NET 9.0부터 사용할 수 있습니다.

메트릭: dotnet.jit.compilation.time
이름 계측 유형 단위(UCUM) 설명
dotnet.jit.compilation.time 카운터 s 프로세스가 시작된 이후 JIT 컴파일러가 메서드를 컴파일하는 데 소요된 시간입니다.

이 메트릭은 호출 JitInfo.GetCompilationTime과 동일한 값을 보고합니다.

.NET 앱을 빌드할 때 관리 코드는 처음에 C#, VB 또는 F#과 같은 상위 수준 언어에서 IL(중간 언어)로 컴파일됩니다. 그런 다음 프로그램이 실행되면 .NET JIT(Just-In-Time) 컴파일러가 IL을 머신 코드로 변환합니다.

JIT 컴파일은 메서드를 처음 실행할 때 발생하므로 대부분의 JIT 컴파일은 애플리케이션을 시작하는 동안 발생하는 경향이 있습니다. JIT 컴파일에 소요된 시간을 줄이면 애플리케이션 시작 시간이 향상될 수 있습니다.

.NET 9.0부터 사용할 수 있습니다.

메트릭: dotnet.thread_pool.thread.count
이름 계측 유형 단위(UCUM) 설명
dotnet.thread_pool.thread.count UpDownCounter {thread} 현재 존재하는 스레드 풀 스레드의 수입니다.

이 메트릭은 호출 ThreadPool.ThreadCount과 동일한 값을 보고합니다.

.NET은 스레드 풀사용하여 작업 항목을 다른 스레드로 예약합니다. 이 메트릭은 현재 해당 스레드 풀에서 관리되는 작업자 스레드 수를 제공합니다.

.NET 9.0부터 사용할 수 있습니다.

메트릭: dotnet.thread_pool.work_item.count
이름 계측 유형 단위(UCUM) 설명
dotnet.thread_pool.work_item.count 카운터 {work_item} 프로세스가 시작된 이후 스레드 풀이 완료된 작업 항목 수입니다.

이 메트릭은 호출 ThreadPool.CompletedWorkItemCount과 동일한 값을 보고합니다.

.NET은 스레드 풀사용하여 작업 항목을 다른 스레드로 예약합니다. 이 메트릭은 스레드 풀 스레드에서 실행된 작업 항목 수를 제공합니다.

.NET 9.0부터 사용할 수 있습니다.

메트릭: dotnet.thread_pool.queue.length
이름 계측 유형 단위(UCUM) 설명
dotnet.thread_pool.queue.length UpDownCounter {work_item} 스레드 풀에서 처리할 현재 큐에 대기 중인 작업 항목의 수입니다.

이 메트릭은 호출 ThreadPool.PendingWorkItemCount과 동일한 값을 보고합니다.

.NET은 스레드 풀사용하여 작업 항목을 다른 스레드로 예약합니다. 이 메트릭은 스레드 풀 스레드 중 하나에서 실행할 현재 큐에 대기 중인 작업 항목의 수를 제공합니다.

.NET 9.0부터 사용할 수 있습니다.

메트릭: dotnet.monitor.lock_contentions
이름 계측 유형 단위(UCUM) 설명
dotnet.monitor.lock_contentions 카운터 {contention} 프로세스가 시작된 이후 모니터 잠금을 획득하려고 할 때 경합이 발생한 횟수입니다.

이 메트릭은 호출 Monitor.LockContentionCount과 동일한 값을 보고합니다.

.NET은 잠금 문과 같은 Monitor.Enter API를 사용하거나 잠금으로 관리되는 개체를 사용할 수 있습니다. 두 번째 스레드가 잠금을 획득하려고 시도하는 동안 한 스레드가 이미 잠금을 보유하는 경우 이를 잠금 경합이라고 합니다.

.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} 관리 코드에서 throw된 예외 수입니다.
attribute Type 설명 예제 현재 상태
error.type string throw된 예외 형식입니다. System.OperationCanceledException; Contoso.MyException Required

이 메트릭은 이벤트에 대한 호출을 계산하는 것과 동일한 값을 보고합니다 AppDomain.FirstChanceException .

.NET 9.0부터 사용할 수 있습니다.