Share via


記憶體回收 ETW 事件

這些事件會收集與垃圾收集相關的資訊。 它們協助診斷和偵錯,包括判斷執行多少次記憶體回收、在記憶體回收期間釋放了多少記憶體,以及其他事項。

這個類別包含下列事件:

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 執行個體的唯一 ID。

GCEnd_V1 事件

下表說明關鍵字和層級:

引發事件的關鍵字 層級
GCKeyword (0x1) 告知性 (4)

下表說明事件資訊:

活動 事件識別碼 引發的時機
GCEnd_V1 2 記憶體回收已經結束。

下表說明事件資料:

欄位名稱 資料類型 描述
計數 win:UInt32 n個記憶體回收。
深度 win:UInt32 所收集的產生。
ClrInstanceID win:UInt16 CLR 或 CoreCLR 執行個體的唯一 ID。

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 執行個體的唯一 ID。

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 執行個體的唯一 ID。
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 執行個體的唯一 ID。

請注意記憶體回收行程所配置的區段大小是依實作而定,有可能在任何時間,包括在定期更新時做變更。 您的應用程式永遠都不應該對相關或根據特定區段的大小做出假設,也不應嘗試設定區段配置的可用記憶體數量。

GCCreateSegment_V1 事件

下表說明關鍵字和層級:

引發事件的關鍵字 層級
GCKeyword (0x1) 告知性 (4)

下表說明事件資訊:

活動 事件識別碼 引發的時機
GCFreeSegment_V1 6 已釋放記憶體回收區段。

下表說明事件資料:

欄位名稱 資料類型 描述
地址 win:UInt64 區段的位址。
ClrInstanceID win:UInt16 CLR 或 CoreCLR 執行個體的唯一 ID。

GCRestartEEBegin_V1 事件

下表說明關鍵字和層級:

引發事件的關鍵字 層級
GCKeyword (0x1) 告知性 (4)

下表說明事件資訊:

活動 事件識別碼 引發的時機
GCRestartEEBegin_V1 7 已開始從通用語言執行階段的擱置中恢復。

沒有事件資料。

GCRestartEEEnd_V1 事件

下表說明關鍵字和層級:

引發事件的關鍵字 層級
GCKeyword (0x1) 告知性 (4)

下表說明事件資訊:

活動 事件識別碼 引發的時機
GCRestartEEEnd_V1 3 從通用語言執行階段擱置恢復已結束。

沒有事件資料。

GCSuspendEE_V1 事件

下表說明關鍵字和層級:

引發事件的關鍵字 層級
GCKeyword (0x1) 告知性 (4)

下表說明事件資訊:

活動 事件識別碼 引發的時機
GCSuspendEE_V1 9 記憶體回收執行引擎擱置的起點。

下表說明事件資料:

欄位名稱 資料類型 描述
原因 win:UInt16 0x0 - 其他。

0x1 - 記憶體回收。

0x2 - 應用程式定義域關閉。

0x3 - 推銷程式碼。

0x4 - 關機。

0x5 - 偵錯工具。

0x6 - 準備進行記憶體回收。
計數 win:UInt32 該時間的 GC 計數。 通常,您會在這之後看到後續「GC 啟動」事件,而且其計數會是這個計數 + 1,因為我們增加記憶體回收期間的 GC 索引。
ClrInstanceID win:UInt16 CLR 或 CoreCLR 執行個體的唯一 ID。

GCSuspendEEEnd_V1 事件

下表說明關鍵字和層級:

引發事件的關鍵字 層級
GCKeyword (0x1) 告知性 (4)

下表說明事件資訊:

活動 事件識別碼 引發的時機
GCSuspendEEEnd_V1 8 記憶體回收執行引擎擱置的終點。

沒有事件資料。

GCAllocationTick_V2 事件

下表說明關鍵字和層級:

引發事件的關鍵字 層級
GCKeyword (0x1) 告知性 (4)

下表說明事件資訊:

活動 事件識別碼 引發的時機
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 執行個體的唯一 ID。
AllocationAmount64 win:UInt64 配置大小 (位元組)。 對於非常大的配置來說這個值是正確的。
TypeId win:Pointer MethodTable 的位址。 當有多個在此事件期間所配置的物件類型時,這是對應至上次的物件配置 (該物件造成超過 100 KB 的臨界值) 的 MethodTable 位址。
TypeName win:UnicodeString 已配置的類型名稱。 當有多個在此事件期間所配置的物件類型時,這是對應至上次的物件配置 (該物件造成超過 100 KB 的臨界值) 的類型。
HeapIndex win:UInt32 物件所配置的堆積位置。 當與工作站記憶體回收一起執行時,這個值是 0 (零)。

GCAllocationTick_V3 事件

下表說明關鍵字和層級:

引發事件的關鍵字 層級
GCKeyword (0x1) 告知性 (4)

下表說明事件資訊:

活動 事件識別碼 引發的時機
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 執行個體的唯一 ID。
AllocationAmount64 win:UInt64 配置大小 (位元組)。 對於非常大的配置來說這個值是正確的。
TypeId win:Pointer MethodTable 的位址。 當有多個在此事件期間所配置的物件類型時,這是對應至上次的物件配置 (該物件造成超過 100 KB 的臨界值) 的 MethodTable 位址。
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 執行個體的唯一 ID。

GCCreateConcurrentThread_V1 事件

下表說明關鍵字和層級:

引發事件的關鍵字 層級
GCKeyword (0x1) 告知性 (4)
ThreadingKeyword (0x10000) 告知性 (4)

下表說明事件資訊:

活動 事件識別碼 引發的時機
GCCreateConcurrentThread_V1 11 並行記憶體回收執行緒已建立。

沒有事件資料。

GCTerminateConcurrentThread_V1 事件

下表說明關鍵字和層級:

引發事件的關鍵字 層級
GCKeyword (0x1) 告知性 (4)
ThreadingKeyword (0x10000) 告知性 (4)

下表說明事件資訊:

活動 事件識別碼 引發的時機
GCTerminateConcurrentThread_V1 12 並行記憶體回收執行緒已終止。

沒有事件資料。

另請參閱