가비지 수집 ETW 이벤트
이러한 이벤트는 가비지 수집과 관련된 정보를 수집합니다. 가비지 수집이 수행된 횟수, 가비지 수집 중에 해제된 메모리 양 등을 결정하는 등 진단 및 디버깅에 도움이 됩니다.
이 범주는 다음 이벤트로 구성됩니다.
- GCStart_V1 이벤트
- GCEnd_V1 이벤트
- GCHeapStats_V1 이벤트
- GCHeapStats_V2 이벤트
- GCCreateSegment_V1 이벤트
- GCFreeSegment_V1 이벤트
- GCRestartEEBegin_V1 이벤트
- GCRestartEEEnd_V1 이벤트
- GCSuspendEE_V1 이벤트
- GCSuspendEEEnd_V1 이벤트
- GCAllocationTick_V2 이벤트
- GCAllocationTick_V3 이벤트
- GCFinalizersBegin_V1 이벤트
- GCFinalizersEnd_V1 이벤트
- GCCreateConcurrentThread_V1 이벤트
- GCTerminateConcurrentThread_V1 이벤트
GCStart_V1 이벤트
다음 표에서는 키워드와 수준을 보여줍니다. 자세한 내용은 CLR ETW 키워드 및 수준참조하세요.
이벤트를 발생시키는 키워드 | 수준 |
---|---|
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로 요청했습니다. |
형 | win:UInt32 | 0x0 - 백그라운드 가비지 수집 외부에서 가비지 수집 차단이 발생했습니다. 0x1 - 백그라운드 가비지 수집 0x2 - 백그라운드 가비지 수집 중에 가비지 수집 차단이 발생했습니다. |
ClrInstanceID | win:UInt16 | CLR 또는 CoreCLR 인스턴스의 고유 ID입니다. |
GCEnd_V1 이벤트
다음 표에서는 키워드와 수준을 보여줍니다.
이벤트를 발생시키는 키워드 | 수준 |
---|---|
GCKeyword (0x1) |
정보 제공 (4) |
다음 표에서는 이벤트 정보를 보여줍니다.
이벤트 | 이벤트 ID | 발생 시기 |
---|---|---|
GCEnd_V1 |
2 | 가비지 수집이 종료되었습니다. |
다음 표에서는 이벤트 데이터를 보여줍니다.
필드 이름 | 데이터 형식 | 묘사 |
---|---|---|
세다 | win:UInt32 | n가비지 수집입니다. |
깊이 | win:UInt32 | 수집된 세대입니다. |
ClrInstanceID | win:UInt16 | CLR 또는 CoreCLR 인스턴스의 고유 ID입니다. |
GCHeapStats_V1 이벤트
다음 표에서는 키워드와 수준을 보여줍니다.
이벤트를 발생시키는 키워드 | 수준 |
---|---|
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 이벤트
다음 표에서는 키워드와 수준을 보여줍니다.
이벤트를 발생시키는 키워드 | 수준 |
---|---|
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 이벤트
다음 표에서는 키워드와 수준을 보여줍니다.
이벤트를 발생시키는 키워드 | 수준 |
---|---|
GCKeyword (0x1) |
정보 제공 (4) |
다음 표에서는 이벤트 정보를 보여줍니다.
이벤트 | 이벤트 ID | 발생 시기 |
---|---|---|
GCCreateSegment_V1 |
5 | 새 가비지 수집 세그먼트가 만들어졌습니다. 또한 이미 실행 중인 프로세스에서 추적을 사용하도록 설정하면 기존 세그먼트마다 이 이벤트가 발생합니다. |
다음 표에서는 이벤트 데이터를 보여줍니다.
필드 이름 | 데이터 형식 | 묘사 |
---|---|---|
주소 | win:UInt64 | 세그먼트의 주소입니다. |
크기 | win:UInt64 | 세그먼트의 크기입니다. |
형 | win:UInt32 | 0x0 - 작은 개체 힙입니다. 0x1 - 큰 개체 힙입니다. 0x2 - 읽기 전용 힙입니다. |
ClrInstanceID | win:UInt16 | CLR 또는 CoreCLR 인스턴스의 고유 ID입니다. |
가비지 수집기에서 할당한 세그먼트의 크기는 구현에 따라 달라지며 정기적인 업데이트를 포함하여 언제든지 변경될 수 있습니다. 앱은 특정 세그먼트 크기에 대해 가정하거나 의존해서는 안 되며 세그먼트 할당에 사용할 수 있는 메모리 양을 구성하려고 시도해서는 안 됩니다.
GCFreeSegment_V1 이벤트
다음 표에서는 키워드와 수준을 보여줍니다.
이벤트를 발생시키는 키워드 | 수준 |
---|---|
GCKeyword (0x1) |
정보 제공 (4) |
다음 표에서는 이벤트 정보를 보여줍니다.
이벤트 | 이벤트 ID | 발생 시기 |
---|---|---|
GCFreeSegment_V1 |
6 | 가비지 수집 세그먼트가 해제되었습니다. |
다음 표에서는 이벤트 데이터를 보여줍니다.
필드 이름 | 데이터 형식 | 묘사 |
---|---|---|
주소 | win:UInt64 | 세그먼트의 주소입니다. |
ClrInstanceID | win:UInt16 | CLR 또는 CoreCLR 인스턴스의 고유 ID입니다. |
GCRestartEEBegin_V1 이벤트
다음 표에서는 키워드와 수준을 보여줍니다.
이벤트를 발생시키는 키워드 | 수준 |
---|---|
GCKeyword (0x1) |
정보 제공 (4) |
다음 표에서는 이벤트 정보를 보여줍니다.
이벤트 | 이벤트 ID | 발생 시기 |
---|---|---|
GCRestartEEBegin_V1 |
7 | 공용 언어 런타임 일시 중단에서 다시 시작되었습니다. |
이벤트 데이터가 없습니다.
GCRestartEEEnd_V1 이벤트
다음 표에서는 키워드와 수준을 보여줍니다.
이벤트를 발생시키는 키워드 | 수준 |
---|---|
GCKeyword (0x1) |
정보 제공 (4) |
다음 표에서는 이벤트 정보를 보여줍니다.
이벤트 | 이벤트 ID | 발생 시기 |
---|---|---|
GCRestartEEEnd_V1 |
3 | 공용 언어 런타임 일시 중단에서 다시 시작이 종료되었습니다. |
이벤트 데이터가 없습니다.
GCSuspendEE_V1 이벤트
다음 표에서는 키워드와 수준을 보여줍니다.
이벤트를 발생시키는 키워드 | 수준 |
---|---|
GCKeyword (0x1) |
정보 제공 (4) |
다음 표에서는 이벤트 정보를 보여줍니다.
이벤트 | 이벤트 ID | 발생 시기 |
---|---|---|
GCSuspendEE_V1 |
9 | 가비지 수집에 대한 실행 엔진 일시 중단의 시작입니다. |
다음 표에서는 이벤트 데이터를 보여줍니다.
필드 이름 | 데이터 형식 | 묘사 |
---|---|---|
이유 | win:UInt16 | 0x0 - 기타. 0x1 - 가비지 수집. 0x2 - 애플리케이션 도메인 종료. 0x3 - 코드 피칭. 0x4 - 종료. 0x5 - 디버거. 0x6 - 가비지 수집 준비 |
세다 | win:UInt32 | 당시의 GC 수입니다. 일반적으로 이후에 후속 GC 시작 이벤트가 표시되며 가비지 수집 중에 GC 인덱스가 늘어나면 개수가 이 개수 + 1이 됩니다. |
ClrInstanceID | win:UInt16 | CLR 또는 CoreCLR 인스턴스의 고유 ID입니다. |
GCSuspendEEEnd_V1 이벤트
다음 표에서는 키워드와 수준을 보여줍니다.
이벤트를 발생시키는 키워드 | 수준 |
---|---|
GCKeyword (0x1) |
정보 제공 (4) |
다음 표에서는 이벤트 정보를 보여줍니다.
이벤트 | 이벤트 ID | 발생 시기 |
---|---|---|
GCSuspendEEEnd_V1 |
8 | 가비지 수집에 대한 실행 엔진 일시 중단 종료 |
이벤트 데이터가 없습니다.
GCAllocationTick_V2 이벤트
다음 표에서는 키워드와 수준을 보여줍니다.
이벤트를 발생시키는 키워드 | 수준 |
---|---|
GCKeyword (0x1) |
자세한 정보 표시 (5) |
다음 표에서는 이벤트 정보를 보여줍니다.
이벤트 | 이벤트 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 이벤트
다음 표에서는 키워드와 수준을 보여줍니다.
이벤트를 발생시키는 키워드 | 수준 |
---|---|
GCKeyword (0x1) |
자세한 정보 표시 (5) |
다음 표에서는 이벤트 정보를 보여줍니다.
이벤트 | 이벤트 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 이벤트
다음 표에서는 키워드와 수준을 보여줍니다.
이벤트를 발생시키는 키워드 | 수준 |
---|---|
GCKeyword (0x1) |
정보 제공 (4) |
다음 표에서는 이벤트 정보를 보여줍니다.
이벤트 | 이벤트 ID | 발생 시기 |
---|---|---|
GCFinalizersBegin_V1 |
14 | 종료자 실행의 시작입니다. |
이벤트 데이터가 없습니다.
GCFinalizersEnd_V1 이벤트
다음 표에서는 키워드와 수준을 보여줍니다.
이벤트를 발생시키는 키워드 | 수준 |
---|---|
GCKeyword (0x1) |
정보 제공 (4) |
다음 표에서는 이벤트 정보를 보여줍니다.
이벤트 | 이벤트 ID | 발생 시기 |
---|---|---|
GCFinalizersEnd_V1 |
13 | 종료자 실행의 끝입니다. |
다음 표에서는 이벤트 데이터를 보여줍니다.
필드 이름 | 데이터 형식 | 묘사 |
---|---|---|
세다 | win:UInt32 | 실행된 종료자 수입니다. |
ClrInstanceID | win:UInt16 | CLR 또는 CoreCLR 인스턴스의 고유 ID입니다. |
GCCreateConcurrentThread_V1 이벤트
다음 표에서는 키워드와 수준을 보여줍니다.
이벤트를 발생시키는 키워드 | 수준 |
---|---|
GCKeyword (0x1) |
정보 제공 (4) |
ThreadingKeyword (0x10000) |
정보 제공 (4) |
다음 표에서는 이벤트 정보를 보여줍니다.
이벤트 | 이벤트 ID | 발생 시기 |
---|---|---|
GCCreateConcurrentThread_V1 |
11 | 동시 가비지 수집 스레드가 만들어졌습니다. |
이벤트 데이터가 없습니다.
GCTerminateConcurrentThread_V1 이벤트
다음 표에서는 키워드와 수준을 보여줍니다.
이벤트를 발생시키는 키워드 | 수준 |
---|---|
GCKeyword (0x1) |
정보 제공 (4) |
ThreadingKeyword (0x10000) |
정보 제공 (4) |
다음 표에서는 이벤트 정보를 보여줍니다.
이벤트 | 이벤트 ID | 발생 시기 |
---|---|---|
GCTerminateConcurrentThread_V1 |
12 | 동시 가비지 수집 스레드가 종료되었습니다. |
이벤트 데이터가 없습니다.
참고 항목
- CLR ETW 이벤트
.NET