垃圾收集 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) |
下表顯示事件資訊:
事件 | 事件標識碼 | 引發時機 |
---|---|---|
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 實例的唯一標識碼。 |
GCEnd_V1事件
下表顯示 關鍵字和層級:
引發事件的關鍵詞 | 水準 |
---|---|
GCKeyword (0x1) |
資訊 (4) |
下表顯示事件資訊:
事件 | 事件標識碼 | 引發時機 |
---|---|---|
GCEnd_V1 |
2 | 垃圾收集已結束。 |
下表顯示事件資料:
功能變數名稱 | 數據類型 | 描述 |
---|---|---|
計數 | win:UInt32 | n 個垃圾收集。 |
深度 | win:UInt32 | 收集的世代。 |
ClrInstanceID | win:UInt16 | CLR 或 CoreCLR 實例的唯一標識碼。 |
GCHeapStats_V1事件
下表顯示 關鍵字和層級:
引發事件的關鍵詞 | 水準 |
---|---|
GCKeyword (0x1) |
資訊 (4) |
下表顯示事件資訊:
事件 | 事件標識碼 | 描述 |
---|---|---|
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 實例的唯一標識碼。 |
GCHeapStats_V2事件
下表顯示 關鍵字和層級:
引發事件的關鍵詞 | 水準 |
---|---|
GCKeyword (0x1) |
資訊 (4) |
下表顯示事件資訊:
事件 | 事件標識碼 | 描述 |
---|---|---|
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 實例的唯一標識碼。 |
GenerationSize4 | win:UInt64 | 固定物件堆積的大小,以位元組為單位。 |
TotalPromotedSize4 | win:UInt64 | 在最後一個集合之後釘選的物件堆積中倖存下來的位元組數目。 |
GCCreateSegment_V1事件
下表顯示 關鍵字和層級:
引發事件的關鍵詞 | 水準 |
---|---|
GCKeyword (0x1) |
資訊 (4) |
下表顯示事件資訊:
事件 | 事件標識碼 | 引發時機 |
---|---|---|
GCCreateSegment_V1 |
5 | 已建立新的垃圾收集區段。 此外,在已經執行的進程上啟用追蹤時,會針對每個現有的區段引發此事件。 |
下表顯示事件資料:
功能變數名稱 | 數據類型 | 描述 |
---|---|---|
位址 | win:UInt64 | 區段的位址。 |
大小 | win:UInt64 | 區段的大小。 |
類型 | win:UInt32 | 0x0 - 小型物件堆積。 0x1 - 大型物件堆積。 0x2 - 只讀堆積。 |
ClrInstanceID | win:UInt16 | CLR 或 CoreCLR 實例的唯一標識碼。 |
請注意,垃圾收集行程所配置的區段大小是實作特定的,而且隨時可能會變更,包括定期更新。 您的應用程式絕對不應該假設或相依於特定區段大小,也不應該嘗試設定區段配置可用的記憶體數量。
GCFreeSegment_V1事件
下表顯示 關鍵字和層級:
引發事件的關鍵詞 | 水準 |
---|---|
GCKeyword (0x1) |
資訊 (4) |
下表顯示事件資訊:
事件 | 事件標識碼 | 引發時機 |
---|---|---|
GCFreeSegment_V1 |
6 | 已釋放垃圾收集區段。 |
下表顯示事件資料:
功能變數名稱 | 數據類型 | 描述 |
---|---|---|
位址 | win:UInt64 | 區段的位址。 |
ClrInstanceID | win:UInt16 | CLR 或 CoreCLR 實例的唯一標識碼。 |
GCRestartEEBegin_V1事件
下表顯示 關鍵字和層級:
引發事件的關鍵詞 | 水準 |
---|---|
GCKeyword (0x1) |
資訊 (4) |
下表顯示事件資訊:
事件 | 事件標識碼 | 引發時機 |
---|---|---|
GCRestartEEBegin_V1 |
7 | 從 Common Language Runtime 暫停恢復已開始。 |
沒有事件數據。
GCRestartEEEnd_V1 事件
下表顯示 關鍵字和層級:
引發事件的關鍵詞 | 水準 |
---|---|
GCKeyword (0x1) |
資訊 (4) |
下表顯示事件資訊:
事件 | 事件標識碼 | 引發時機 |
---|---|---|
GCRestartEEEnd_V1 |
3 | 從 Common Language Runtime 暫停恢復已結束。 |
沒有事件數據。
GCSuspendEE_V1 事件
下表顯示 關鍵字和層級:
引發事件的關鍵詞 | 水準 |
---|---|
GCKeyword (0x1) |
資訊 (4) |
下表顯示事件資訊:
事件 | 事件標識碼 | 引發時機 |
---|---|---|
GCSuspendEE_V1 |
9 | 開始暫停執行引擎以進行垃圾收集。 |
下表顯示事件資料:
功能變數名稱 | 數據類型 | 描述 |
---|---|---|
原因 | win:UInt16 | 0x0 - 其他。 0x1 - 垃圾收集。 0x2 - 應用程式域關機。 0x3 - 程式代碼投向。 0x4 - 關機。 0x5 - 調試程式。 0x6 - 準備垃圾收集。 |
計數 | win:UInt32 | 當時的 GC 計數。 通常,您會在此之後看到後續的 GC Start 事件,其 Count 會是這個 Count + 1,因為我們在垃圾收集期間增加 GC 索引。 |
ClrInstanceID | win:UInt16 | CLR 或 CoreCLR 實例的唯一標識碼。 |
GCSuspendEEEnd_V1事件
下表顯示 關鍵字和層級:
引發事件的關鍵詞 | 水準 |
---|---|
GCKeyword (0x1) |
資訊 (4) |
下表顯示事件資訊:
事件 | 事件標識碼 | 引發時機 |
---|---|---|
GCSuspendEEEnd_V1 |
8 | 垃圾收集的執行引擎暫停結束。 |
沒有事件數據。
GCAllocationTick_V2事件
下表顯示 關鍵字和層級:
引發事件的關鍵詞 | 水準 |
---|---|
GCKeyword (0x1) |
詳細資訊 (5) |
下表顯示事件資訊:
事件 | 事件標識碼 | 引發時機 |
---|---|---|
GCAllocationTick_V2 |
10 | 每個物件堆積配置大約 100 KB 時。 也就是說,SOH、LOH 和 POH 會個別累積其配置的位元組。 在 [伺服器 GC] 中,這會依堆積完成。 |
下表顯示事件資料:
功能變數名稱 | 數據類型 | 描述 |
---|---|---|
AllocationAmount | win:UInt32 | 配置大小,以位元組為單位。 此值適用於小於ULONG長度的配置(4,294,967,295個字節)。 如果配置更大,此欄位會包含截斷的值。 針對非常大的配置使用 AllocationAmount64 。 |
AllocationKind | win:UInt32 | 0x0 - 小型物件配置(配置位於小型物件堆積中)。 0x1 - 大型物件配置(配置位於大型物件堆積中)。 0x2 - 釘選的物件配置(配置位於釘選的物件堆積中)。 |
ClrInstanceID | win:UInt16 | CLR 或 CoreCLR 實例的唯一標識碼。 |
AllocationAmount64 | win:UInt64 | 配置大小,以位元組為單位。 這個值對於非常大的配置而言是準確的。 |
TypeId | win:Pointer | MethodTable 的位址。 當在這個事件期間配置了數種類型的物件時,這是對應到最後一個配置物件的 MethodTable 位址(導致超過 100 KB 閾值的物件)。 |
TypeName | win:UnicodeString | 已配置的型別名稱。 當在這個事件期間配置了數種類型的物件時,這是最後一個配置物件的類型(導致超過100 KB閾值的物件)。 |
HeapIndex | win:UInt32 | 配置物件的堆積。 使用工作站垃圾收集執行時,此值為0(零)。 |
GCAllocationTick_V3 事件
下表顯示 關鍵字和層級:
引發事件的關鍵詞 | 水準 |
---|---|
GCKeyword (0x1) |
詳細資訊 (5) |
下表顯示事件資訊:
事件 | 事件標識碼 | 引發時機 |
---|---|---|
GCAllocationTick_V2 |
10 | 每個物件堆積配置大約 100 KB 時。 也就是說,SOH、LOH 和 POH 會個別累積其配置的位元組。 在 [伺服器 GC] 中,這會依堆積完成。 |
下表顯示事件資料:
功能變數名稱 | 數據類型 | 描述 |
---|---|---|
AllocationAmount | win:UInt32 | 配置大小,以位元組為單位。 此值適用於小於ULONG長度的配置(4,294,967,295個字節)。 如果配置更大,此欄位會包含截斷的值。 針對非常大的配置使用 AllocationAmount64 。 |
AllocationKind | win:UInt32 | 0x0 - 小型物件配置(配置位於小型物件堆積中)。 0x1 - 大型物件配置(配置位於大型物件堆積中)。 0x2 - 釘選的物件配置(配置位於釘選的物件堆積中)。 |
ClrInstanceID | win:UInt16 | CLR 或 CoreCLR 實例的唯一標識碼。 |
AllocationAmount64 | win:UInt64 | 配置大小,以位元組為單位。 這個值對於非常大的配置而言是準確的。 |
TypeId | win:Pointer | MethodTable 的位址。 當在這個事件期間配置了數種類型的物件時,這是對應到最後一個配置物件的 MethodTable 位址(導致超過 100 KB 閾值的物件)。 |
TypeName | win:UnicodeString | 已配置的型別名稱。 當在這個事件期間配置了數種類型的物件時,這是最後一個配置物件的類型(導致超過100 KB閾值的物件)。 |
HeapIndex | win:UInt32 | 配置物件的堆積。 使用工作站垃圾收集執行時,此值為0(零)。 |
位址 | win:Pointer | 最後一個配置對象的位址。 |
GCFinalizersBegin_V1事件
下表顯示 關鍵字和層級:
引發事件的關鍵詞 | 水準 |
---|---|
GCKeyword (0x1) |
資訊 (4) |
下表顯示事件資訊:
事件 | 事件標識碼 | 引發時機 |
---|---|---|
GCFinalizersBegin_V1 |
14 | 執行完成項的開始。 |
沒有事件數據。
GCFinalizersEnd_V1事件
下表顯示 關鍵字和層級:
引發事件的關鍵詞 | 水準 |
---|---|
GCKeyword (0x1) |
資訊 (4) |
下表顯示事件資訊:
事件 | 事件標識碼 | 引發時機 |
---|---|---|
GCFinalizersEnd_V1 |
13 | 執行完成項的結尾。 |
下表顯示事件資料:
功能變數名稱 | 數據類型 | 描述 |
---|---|---|
計數 | win:UInt32 | 已執行的完成項數目。 |
ClrInstanceID | win:UInt16 | CLR 或 CoreCLR 實例的唯一標識碼。 |
GCCreateConcurrentThread_V1 事件
下表顯示 關鍵字和層級:
引發事件的關鍵詞 | 水準 |
---|---|
GCKeyword (0x1) |
資訊 (4) |
ThreadingKeyword (0x10000) |
資訊 (4) |
下表顯示事件資訊:
事件 | 事件標識碼 | 引發時機 |
---|---|---|
GCCreateConcurrentThread_V1 |
11 | 已建立並行垃圾收集線程。 |
沒有事件數據。
GCTerminateConcurrentThread_V1 事件
下表顯示 關鍵字和層級:
引發事件的關鍵詞 | 水準 |
---|---|
GCKeyword (0x1) |
資訊 (4) |
ThreadingKeyword (0x10000) |
資訊 (4) |
下表顯示事件資訊:
事件 | 事件標識碼 | 引發時機 |
---|---|---|
GCTerminateConcurrentThread_V1 |
12 | 並行垃圾收集線程已終止。 |
沒有事件數據。