記憶體回收 ETW 事件
這些事件會收集與垃圾收集相關的資訊。 它們協助診斷和偵錯,包括判斷執行多少次記憶體回收、在記憶體回收期間釋放了多少記憶體,以及其他事項。
這個類別包含下列事件:
- GCStart_V1 事件
- GCEnd_V1 事件
- GCHeapStats_V1 事件
- GCHeapStats_V2事件
- GCCreateSegment_V1 事件
- GCCreateSegment_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 執行個體的唯一 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 | 並行記憶體回收執行緒已終止。 |
沒有事件資料。