가비지 컬렉션 ETW 이벤트
이러한 이벤트는 가비지 수집과 관련된 정보를 수집합니다. 가비지 수집 수행 횟수, 가비지 수집 중에 해제된 메모리 양 등을 판별하는 작업을 포함하여 진단과 디버깅에 도움이 됩니다.
이 범주는 다음 이벤트로 구성됩니다.
- GCStart_V1 Event
- GCEnd_V1 Event
- GCHeapStats_V1 Event
- GCHeapStats_V2 이벤트
- GCCreateSegment_V1 Event
- GCFreeSegment_V1 Event
- GCRestartEEBegin_V1 Event
- GCRestartEEEnd_V1 Event
- GCSuspendEE_V1 Event
- GCSuspendEEEnd_V1 Event
- GCAllocationTick_V2 Event
- GCAllocationTick_V3 이벤트
- GCFinalizersBegin_V1 Event
- GCFinalizersEnd_V1 Event
- GCCreateConcurrentThread_V1 Event
- GCTerminateConcurrentThread_V1 Event
GCStart_V1 Event
다음 표에서는 키워드와 수준을 보여 줍니다. 자세한 내용은 CLR ETW 키워드 and 수준을 참조하세요.
이벤트를 발생시키기 위한 키워드 | Level |
---|---|
GCKeyword (0x1) |
정보(4) |
다음 표에서는 이벤트 정보를 보여 줍니다.
이벤트 | 이벤트 ID | 발생 시기 |
---|---|---|
GCStart_V1 |
1 | 가비지 수집이 시작되었습니다. |
다음 표에서는 이벤트 데이터를 보여 줍니다.
필드 이름 | 데이터 형식 | 설명 |
---|---|---|
개수 | win:UInt32 | n번째 가비지 수집입니다. |
깊이 | win:UInt32 | 수집되고 있는 세대입니다. |
원인 | win:UInt32 | 가비지 수집이 트리거된 이유입니다. 0x0 - 작은 개체 힙 할당. 0x1 - 발생됨. 0x2 - 메모리 부족. 0x3 - 비어 있음. 0x4 - 큰 개체 힙 할당. 0x5 - 공간 부족(작은 개체 힙용). 0x6 - 공간 부족(큰 개체 힙용). 0x7 - 발생하지만 차단으로 강제 적용되지 않음. 0x8 - 스트레스 테스트. 0x9 - 프로세스가 메모리가 낮고 GC가 유도된 것으로 관찰된 종료자 스레드입니다. 0x10 - GC를 유도하고 압축 GC로 요청한 사용자 코드입니다. |
Type | win:UInt32 | 0x0 - 가비지 수집 차단이 백그라운드 가비지 수집 외부에서 발생함. 0x1 - 백그라운드 가비지 수집. 0x2 - 가비지 수집 차단이 백그라운드 가비지 수집 중에 발생함. |
ClrInstanceID | win:UInt16 | CLR 또는 CoreCLR 인스턴스에 대한 고유 ID입니다. |
GCEnd_V1 Event
다음 표에서는 키워드와 수준을 보여 줍니다.
이벤트를 발생시키기 위한 키워드 | Level |
---|---|
GCKeyword (0x1) |
정보(4) |
다음 표에서는 이벤트 정보를 보여 줍니다.
이벤트 | 이벤트 ID | 발생 시기 |
---|---|---|
GCEnd_V1 |
2 | 가비지 수집이 종료되었습니다. |
다음 표에서는 이벤트 데이터를 보여 줍니다.
필드 이름 | 데이터 형식 | 설명 |
---|---|---|
개수 | win:UInt32 | n번째 가비지 수집입니다. |
깊이 | win:UInt32 | 수집된 세대입니다. |
ClrInstanceID | win:UInt16 | CLR 또는 CoreCLR 인스턴스에 대한 고유 ID입니다. |
GCHeapStats_V1 Event
다음 표에서는 키워드와 수준을 보여 줍니다.
이벤트를 발생시키기 위한 키워드 | Level |
---|---|
GCKeyword (0x1) |
정보(4) |
다음 표에서는 이벤트 정보를 보여 줍니다.
이벤트 | 이벤트 ID | 설명 |
---|---|---|
GCHeapStats_V1 |
4 | 각 가비지 수집 종료 시 힙 통계를 표시합니다. |
다음 표에서는 이벤트 데이터를 보여 줍니다.
필드 이름 | 데이터 형식 | 설명 |
---|---|---|
GenerationSize0 | win:UInt64 | 0세대 메모리의 크기(바이트)입니다. |
TotalPromotedSize0 | win:UInt64 | 0세대에서 1세대로 수준이 올려진 바이트 수입니다. |
GenerationSize1 | win:UInt64 | 1세대 메모리의 크기(바이트)입니다. |
TotalPromotedSize1 | win:UInt64 | 1세대에서 2세대로 수준이 올려진 바이트 수입니다. |
GenerationSize2 | win:UInt64 | 2세대 메모리의 크기(바이트)입니다. |
TotalPromotedSize2 | win:UInt64 | 마지막 수집 후에 2세대에 남아 있는 바이트 수입니다. |
GenerationSize3 | win:UInt64 | 큰 개체 힙의 크기(바이트)입니다. |
TotalPromotedSize3 | win:UInt64 | 마지막 수집 후에 큰 개체 힙에 남아 있는 바이트 수입니다. |
FinalizationPromotedSize | win:UInt64 | 종료 준비가 된 개체의 전체 크기(바이트)입니다. |
FinalizationPromotedCount | win:UInt64 | 종료 준비가 된 개체 수입니다. |
PinnedObjectCount | win:UInt32 | 고정된(제거할 수 없는) 개체 수입니다. |
SinkBlockCount | win:UInt32 | 사용 중인 동기화 블록 수입니다. |
GCHandleCount | win:UInt32 | 사용 중인 가비지 수집 핸들 수입니다. |
ClrInstanceID | win:UInt16 | CLR 또는 CoreCLR 인스턴스에 대한 고유 ID입니다. |
GCHeapStats_V2 이벤트
다음 표에서는 키워드와 수준을 보여 줍니다.
이벤트를 발생시키기 위한 키워드 | Level |
---|---|
GCKeyword (0x1) |
정보(4) |
다음 표에서는 이벤트 정보를 보여 줍니다.
이벤트 | 이벤트 ID | 설명 |
---|---|---|
GCHeapStats_V2 |
4 | 각 가비지 수집 종료 시 힙 통계를 표시합니다. |
다음 표에서는 이벤트 데이터를 보여 줍니다.
필드 이름 | 데이터 형식 | 설명 |
---|---|---|
GenerationSize0 | win:UInt64 | 0세대 메모리의 크기(바이트)입니다. |
TotalPromotedSize0 | win:UInt64 | 0세대에서 1세대로 수준이 올려진 바이트 수입니다. |
GenerationSize1 | win:UInt64 | 1세대 메모리의 크기(바이트)입니다. |
TotalPromotedSize1 | win:UInt64 | 1세대에서 2세대로 수준이 올려진 바이트 수입니다. |
GenerationSize2 | win:UInt64 | 2세대 메모리의 크기(바이트)입니다. |
TotalPromotedSize2 | win:UInt64 | 마지막 수집 후에 2세대에 남아 있는 바이트 수입니다. |
GenerationSize3 | win:UInt64 | 큰 개체 힙의 크기(바이트)입니다. |
TotalPromotedSize3 | win:UInt64 | 마지막 수집 후에 큰 개체 힙에 남아 있는 바이트 수입니다. |
FinalizationPromotedSize | win:UInt64 | 종료 준비가 된 개체의 전체 크기(바이트)입니다. |
FinalizationPromotedCount | win:UInt64 | 종료 준비가 된 개체 수입니다. |
PinnedObjectCount | win:UInt32 | 고정된(제거할 수 없는) 개체 수입니다. |
SinkBlockCount | win:UInt32 | 사용 중인 동기화 블록 수입니다. |
GCHandleCount | win:UInt32 | 사용 중인 가비지 수집 핸들 수입니다. |
ClrInstanceID | win:UInt16 | CLR 또는 CoreCLR 인스턴스에 대한 고유 ID입니다. |
GenerationSize4 | win:UInt64 | 고정된 개체 힙의 크기(바이트)입니다. |
TotalPromotedSize4 | win:UInt64 | 마지막 수집 후에 고정된 개체 힙에 남아 있는 바이트 수입니다. |
GCCreateSegment_V1 Event
다음 표에서는 키워드와 수준을 보여 줍니다.
이벤트를 발생시키기 위한 키워드 | Level |
---|---|
GCKeyword (0x1) |
정보(4) |
다음 표에서는 이벤트 정보를 보여 줍니다.
이벤트 | 이벤트 ID | 발생 시기 |
---|---|---|
GCCreateSegment_V1 |
5 | 새 가비지 수집 세그먼트가 만들어졌습니다. 또한 이미 실행 중인 프로세스에서 추적 기능이 사용되면 각 기존 세그먼트에 대해 이 이벤트가 발생합니다. |
다음 표에서는 이벤트 데이터를 보여 줍니다.
필드 이름 | 데이터 형식 | 설명 |
---|---|---|
주소 | win:UInt64 | 세그먼트 주소입니다. |
크기 | win:UInt64 | 세그먼트 크기입니다. |
Type | win:UInt32 | 0x0 - 작은 개체 힙. 0x1 - 큰 개체 힙 0x2 - 읽기 전용 힙. |
ClrInstanceID | win:UInt16 | CLR 또는 CoreCLR 인스턴스에 대한 고유 ID입니다. |
가비지 수집기에서 할당되는 세그먼트 크기는 구현에 따라 다르며 정기적인 업데이트를 포함하여 언제든지 변경될 수 있습니다. 앱에서 특정 세그먼트 크기를 가정하거나 의존해서는 안 되며, 세그먼트 할당에 사용할 수 있는 메모리 크기를 구성하려고 해서도 안 됩니다.
GCFreeSegment_V1 Event
다음 표에서는 키워드와 수준을 보여 줍니다.
이벤트를 발생시키기 위한 키워드 | Level |
---|---|
GCKeyword (0x1) |
정보(4) |
다음 표에서는 이벤트 정보를 보여 줍니다.
이벤트 | 이벤트 ID | 발생 시기 |
---|---|---|
GCFreeSegment_V1 |
6 | 가비지 수집 세그먼트가 해제되었습니다. |
다음 표에서는 이벤트 데이터를 보여 줍니다.
필드 이름 | 데이터 형식 | 설명 |
---|---|---|
주소 | win:UInt64 | 세그먼트 주소입니다. |
ClrInstanceID | win:UInt16 | CLR 또는 CoreCLR 인스턴스에 대한 고유 ID입니다. |
GCRestartEEBegin_V1 Event
다음 표에서는 키워드와 수준을 보여 줍니다.
이벤트를 발생시키기 위한 키워드 | Level |
---|---|
GCKeyword (0x1) |
정보(4) |
다음 표에서는 이벤트 정보를 보여 줍니다.
이벤트 | 이벤트 ID | 발생 시기 |
---|---|---|
GCRestartEEBegin_V1 |
7 | 공용 언어 런타임 일시 중단에서 다시 시작이 시작되었습니다. |
이벤트 데이터가 없습니다.
GCRestartEEEnd_V1 Event
다음 표에서는 키워드와 수준을 보여 줍니다.
이벤트를 발생시키기 위한 키워드 | Level |
---|---|
GCKeyword (0x1) |
정보(4) |
다음 표에서는 이벤트 정보를 보여 줍니다.
이벤트 | 이벤트 ID | 발생 시기 |
---|---|---|
GCRestartEEEnd_V1 |
3 | 공용 언어 런타임 일시 중단에서 다시 시작이 종료되었습니다. |
이벤트 데이터가 없습니다.
GCSuspendEE_V1 Event
다음 표에서는 키워드와 수준을 보여 줍니다.
이벤트를 발생시키기 위한 키워드 | Level |
---|---|
GCKeyword (0x1) |
정보(4) |
다음 표에서는 이벤트 정보를 보여 줍니다.
이벤트 | 이벤트 ID | 발생 시기 |
---|---|---|
GCSuspendEE_V1 |
9 | 가비지 수집에 대한 실행 엔진의 일시 중단이 시작됩니다. |
다음 표에서는 이벤트 데이터를 보여 줍니다.
필드 이름 | 데이터 형식 | 설명 |
---|---|---|
원인 | win:UInt16 | 0x0 - 기타. 0x1 - 가비지 수집. 0x2 - 애플리케이션 도메인 중지. 0x3 - 코드 피칭. 0x4 - 종료. 0x5 - 디버거. 0x6 - 가비지 수집 준비. |
Count | win:UInt32 | 해당 시점의 GC 개수입니다. 일반적으로 이 이벤트 뒤에 후속 GC 시작 이벤트가 확인되고 가비지 수집 중에 GC 인덱스를 늘리면 해당 개수는 이 개수 + 1이 됩니다. |
ClrInstanceID | win:UInt16 | CLR 또는 CoreCLR 인스턴스에 대한 고유 ID입니다. |
GCSuspendEEEnd_V1 Event
다음 표에서는 키워드와 수준을 보여 줍니다.
이벤트를 발생시키기 위한 키워드 | Level |
---|---|
GCKeyword (0x1) |
정보(4) |
다음 표에서는 이벤트 정보를 보여 줍니다.
이벤트 | 이벤트 ID | 발생 시기 |
---|---|---|
GCSuspendEEEnd_V1 |
8 | 가비지 수집에 대한 실행 엔진의 일시 중단이 종료됩니다. |
이벤트 데이터가 없습니다.
GCAllocationTick_V2 Event
다음 표에서는 키워드와 수준을 보여 줍니다.
이벤트를 발생시키기 위한 키워드 | Level |
---|---|
GCKeyword (0x1) |
정보(4) |
다음 표에서는 이벤트 정보를 보여 줍니다.
이벤트 | 이벤트 ID | 발생 시기 |
---|---|---|
GCAllocationTick_V2 |
10 | 개체 힙당 약 100KB가 할당될 때마다 즉, SOH, LOH 및 POH는 할당된 바이트를 별도로 누적합니다. 서버 GC에서 이 작업은 힙당 수행됩니다. |
다음 표에서는 이벤트 데이터를 보여 줍니다.
필드 이름 | 데이터 형식 | 설명 |
---|---|---|
AllocationAmount | win:UInt32 | 할당 크기(바이트)입니다. 이 값은 ULONG 길이(4,294,967,295바이트)보다 적은 할당에 대해 정확합니다. 할당이 더 크면 이 필드에 잘린 값이 포함됩니다. 매우 큰 할당에 대해서는 AllocationAmount64 를 사용하세요. |
AllocationKind | win:UInt32 | 0x0 - 작은 개체 할당(할당이 작은 개체 힙에 포함됨). 0x1 - 큰 개체 할당(할당이 큰 개체 힙에 포함됨). 0x2 - 고정된 개체 할당(할당은 고정된 개체 힙에 있습니다). |
ClrInstanceID | win:UInt16 | CLR 또는 CoreCLR 인스턴스에 대한 고유 ID입니다. |
AllocationAmount64 | win:UInt64 | 할당 크기(바이트)입니다. 이 값은 매우 큰 할당에 대해 정확합니다. |
TypeId | win:Pointer | MethodTable 주소입니다. 이 이벤트 중에 여러 가지 개체 형식이 할당되었으면 이 항목은 할당된 마지막 개체(100KB 임계값을 초과한 개체)에 해당하는 MethodTable의 주소입니다. |
TypeName | win:UnicodeString | 할당된 형식 이름입니다. 이 이벤트 중에 여러 가지 개체 형식이 할당되었으면 이 항목은 할당된 마지막 개체(100KB 임계값을 초과한 개체)의 형식입니다. |
HeapIndex | win:UInt32 | 개체가 할당된 힙입니다. 워크스테이션 가비지 수집에서 실행될 때 이 값은 0(영)입니다. |
GCAllocationTick_V3 이벤트
다음 표에서는 키워드와 수준을 보여 줍니다.
이벤트를 발생시키기 위한 키워드 | Level |
---|---|
GCKeyword (0x1) |
정보(4) |
다음 표에서는 이벤트 정보를 보여 줍니다.
이벤트 | 이벤트 ID | 발생 시기 |
---|---|---|
GCAllocationTick_V2 |
10 | 개체 힙당 약 100KB가 할당될 때마다 즉, SOH, LOH 및 POH는 할당된 바이트를 별도로 누적합니다. 서버 GC에서 이 작업은 힙당 수행됩니다. |
다음 표에서는 이벤트 데이터를 보여 줍니다.
필드 이름 | 데이터 형식 | 설명 |
---|---|---|
AllocationAmount | win:UInt32 | 할당 크기(바이트)입니다. 이 값은 ULONG 길이(4,294,967,295바이트)보다 적은 할당에 대해 정확합니다. 할당이 더 크면 이 필드에 잘린 값이 포함됩니다. 매우 큰 할당에 대해서는 AllocationAmount64 를 사용하세요. |
AllocationKind | win:UInt32 | 0x0 - 작은 개체 할당(할당이 작은 개체 힙에 포함됨). 0x1 - 큰 개체 할당(할당이 큰 개체 힙에 포함됨). 0x2 - 고정된 개체 할당(할당은 고정된 개체 힙에 있습니다). |
ClrInstanceID | win:UInt16 | CLR 또는 CoreCLR 인스턴스에 대한 고유 ID입니다. |
AllocationAmount64 | win:UInt64 | 할당 크기(바이트)입니다. 이 값은 매우 큰 할당에 대해 정확합니다. |
TypeId | win:Pointer | MethodTable 주소입니다. 이 이벤트 중에 여러 가지 개체 형식이 할당되었으면 이 항목은 할당된 마지막 개체(100KB 임계값을 초과한 개체)에 해당하는 MethodTable의 주소입니다. |
TypeName | win:UnicodeString | 할당된 형식 이름입니다. 이 이벤트 중에 여러 가지 개체 형식이 할당되었으면 이 항목은 할당된 마지막 개체(100KB 임계값을 초과한 개체)의 형식입니다. |
HeapIndex | win:UInt32 | 개체가 할당된 힙입니다. 워크스테이션 가비지 수집에서 실행될 때 이 값은 0(영)입니다. |
주소 | win:Pointer | 마지막으로 할당된 개체의 주소입니다. |
GCFinalizersBegin_V1 Event
다음 표에서는 키워드와 수준을 보여 줍니다.
이벤트를 발생시키기 위한 키워드 | Level |
---|---|
GCKeyword (0x1) |
정보(4) |
다음 표에서는 이벤트 정보를 보여 줍니다.
이벤트 | 이벤트 ID | 발생 시기 |
---|---|---|
GCFinalizersBegin_V1 |
14 | 종료자 실행이 시작됩니다. |
이벤트 데이터가 없습니다.
GCFinalizersEnd_V1 Event
다음 표에서는 키워드와 수준을 보여 줍니다.
이벤트를 발생시키기 위한 키워드 | Level |
---|---|
GCKeyword (0x1) |
정보(4) |
다음 표에서는 이벤트 정보를 보여 줍니다.
이벤트 | 이벤트 ID | 발생 시기 |
---|---|---|
GCFinalizersEnd_V1 |
13 | 종료자 실행이 종료됩니다. |
다음 표에서는 이벤트 데이터를 보여 줍니다.
필드 이름 | 데이터 형식 | 설명 |
---|---|---|
개수 | win:UInt32 | 실행된 종료자 수입니다. |
ClrInstanceID | win:UInt16 | CLR 또는 CoreCLR 인스턴스에 대한 고유 ID입니다. |
GCCreateConcurrentThread_V1 Event
다음 표에서는 키워드와 수준을 보여 줍니다.
이벤트를 발생시키기 위한 키워드 | Level |
---|---|
GCKeyword (0x1) |
정보(4) |
ThreadingKeyword (0x10000) |
정보(4) |
다음 표에서는 이벤트 정보를 보여 줍니다.
이벤트 | 이벤트 ID | 발생 시기 |
---|---|---|
GCCreateConcurrentThread_V1 |
11 | 동시 가비지 수집 스레드가 만들어졌습니다. |
이벤트 데이터가 없습니다.
GCTerminateConcurrentThread_V1 Event
다음 표에서는 키워드와 수준을 보여 줍니다.
이벤트를 발생시키기 위한 키워드 | Level |
---|---|
GCKeyword (0x1) |
정보(4) |
ThreadingKeyword (0x10000) |
정보(4) |
다음 표에서는 이벤트 정보를 보여 줍니다.
이벤트 | 이벤트 ID | 발생 시기 |
---|---|---|
GCTerminateConcurrentThread_V1 |
12 | 동시 가비지 수집 스레드가 종료되었습니다. |
이벤트 데이터가 없습니다.
참고 항목
.NET