.NET 运行时垃圾回收事件
本文中所述的事件收集与垃圾回收相关的信息。 它们有助于诊断和调试,包括确定执行垃圾回收的次数、垃圾回收期间释放的内存量等。有关如何将这些事件用于诊断的详细信息,请参阅对 .NET 应用程序进行日志记录和跟踪
GCStart_V2 事件
下表显示了关键字和级别:
引发事件的关键字 | Level |
---|---|
GCKeyword (0x1) |
信息性 (4) |
下表显示了事件信息:
事件 | 事件 ID | 在发生以下情况时引发 |
---|---|---|
GCStart_V1 |
1 | 垃圾回收已启动。 |
下表显示了事件数据:
字段名 | 数据类型 | 说明 |
---|---|---|
Count |
win:UInt32 |
第 n代垃圾回收。 |
Depth |
win:UInt32 |
正在回收的代。 |
Reason |
win:UInt32 |
垃圾回收的触发原因:0x0 - 小型对象堆分配。0x1 - 已引发。0x2 - 内存不足。0x3 - 空。0x4 - 大型对象堆分配。0x5 - 空间外(针对小型对象堆)。0x6 - 空间外(针对大型对象堆)。0x7 - 已引发,但不是强制作为阻塞。 |
Type |
win:UInt32 |
0x0 - 后台垃圾回收外发生了阻止垃圾回收。0x1 - 后台垃圾回收。0x2 - 后台垃圾回收时发生了阻止垃圾回收。 |
ClrInstanceID |
win:UInt16 | CoreCLR 实例的唯一 ID。 |
GCEnd_V1 事件
下表显示了关键字和级别:
引发事件的关键字 | Level |
---|---|
GCKeyword (0x1) |
信息性 (4) |
下表显示了事件信息:
事件 | 事件 ID | 在发生以下情况时引发 |
---|---|---|
GCEnd_V1 |
2 | 垃圾回收已结束。 |
下表显示了事件数据:
字段名 | 数据类型 | 说明 |
---|---|---|
Count |
win:UInt32 |
第 n代垃圾回收。 |
Depth |
win:UInt32 |
已回收的代。 |
ClrInstanceID |
win:UInt16 | 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 |
CoreCLR 实例的唯一 ID。 |
GenerationSize4 |
win:UInt64 |
已固定对象堆的大小(以字节为单位)。 |
TotalPromotedSize4 |
win:UInt64 |
上次回收后仍存在于固定对象堆中的字节数。 |
GCCreateSegment_V1 事件
下表显示了关键字和级别:
引发事件的关键字 | Level |
---|---|
GCKeyword (0x1) |
信息性 (4) |
下表显示了事件信息:
事件 | 事件 ID | 在发生以下情况时引发 |
---|---|---|
GCCreateSegment_V1 |
5 | 已创建的新的垃圾回收段。 此外,当在已运行的进程中启用跟踪时,将为每个现有段引发此事件。 |
下表显示了事件数据:
字段名 | 数据类型 | 说明 |
---|---|---|
Address |
win:UInt64 |
段的地址。 |
Size |
win:UInt64 |
段的大小。 |
Type |
win:UInt32 |
0x0 - 小型对象堆。 0x0 - 大型对象堆。 0x2 - 只读堆。 |
ClrInstanceID |
win:UInt16 |
CoreCLR 实例的唯一 ID。 |
请注意,由垃圾回收器分配的段的大小特定于实现,且随时可能更改(包括定期更新)。 应用程序不应假设特定段的大小或依赖于此大小,也不应尝试配置段分配可用的内存量。
GCFreeSegment_V1 事件
下表显示了关键字和级别:
引发事件的关键字 | Level |
---|---|
GCKeyword (0x1) |
信息性 (4) |
下表显示了事件信息:
事件 | 事件 ID | 在发生以下情况时引发 |
---|---|---|
GCFreeSegment_V1 |
6 | 已释放垃圾回收段。 |
下表显示了事件数据:
字段名 | 数据类型 | 说明 |
---|---|---|
Address |
win:UInt64 |
段的地址。 |
ClrInstanceID |
win:UInt16 |
CoreCLR 实例的唯一 ID。 |
GCRestartEEBegin_V1 事件
下表显示了关键字和级别:
引发事件的关键字 | Level |
---|---|
GCKeyword (0x1) |
信息性 (4) |
下表显示了事件信息:
事件 | 事件 ID | 在发生以下情况时引发 |
---|---|---|
GCRestartEEBegin_V1 |
7 | 已开始从公共语言运行时挂起进行恢复。 |
此事件没有任何事件数据。
GCRestartEEEnd_V1 事件
下表显示了关键字和级别:
引发事件的关键字 | Level |
---|---|
GCKeyword (0x1) |
信息性 (4) |
下表显示了事件信息:
事件 | 事件 ID | 在发生以下情况时引发 |
---|---|---|
GCRestartEEEnd_V1 |
3 | 从公共语言运行时挂起进行的恢复已结束。 |
此事件没有任何事件数据。
GCSuspendEEEnd_V1 事件
下表显示了关键字和级别:
引发事件的关键字 | Level |
---|---|
GCKeyword (0x1) |
信息性 (4) |
下表显示了事件信息:
事件 | 事件 ID | 在发生以下情况时引发 |
---|---|---|
GCSuspendEEEnd_V1 |
8 | 结束垃圾回收执行引擎的挂起。 |
此事件没有任何事件数据。
GCSuspendEEBegin_V1 事件
下表显示了关键字和级别:
引发事件的关键字 | Level |
---|---|
GCKeyword (0x1) |
信息性 (4) |
下表显示了事件信息:
事件 | 事件 ID | 在发生以下情况时引发 |
---|---|---|
GCSuspendEEBegin_V1 |
9 | 开始挂起垃圾回收的执行引擎。 |
字段名 | 数据类型 | 说明 |
---|---|---|
Count |
win:UInt32 |
第 n代垃圾回收。 |
Reason |
win:UInt32 |
EE 挂起的原因。0x0 :因其他事件而暂停0x1 :因 GC 而暂停。0x2 :因 AppDomain 关闭而暂停。0x3 :因代码间距调整而暂停。0x4 :因关闭而暂停。0x5 :因调试器而暂停。0x6 :因 GC 准备而暂停。0x7 :因调试程序扫描而暂停 |
GCAllocationTick_V3 事件
下表显示了关键字和级别:
引发事件的关键字 | Level |
---|---|
GCKeyword (0x1) |
详细级别 (5) |
下表显示了事件信息:
事件 | 事件 ID | 在发生以下情况时引发 |
---|---|---|
GCAllocationTick_V3 |
10 | 每次大约分配 100 KB。 |
下表显示了事件数据:
字段名 | 数据类型 | 说明 |
---|---|---|
AllocationAmount |
win:UInt32 |
分配大小(以字节为单位)。 对于小于 ULONG(4,294,967,295 字节)长度的分配,此值为精确值。 如果分配长度更大,则此字段包含了截断的值。 对于非常大的分配使用 AllocationAmount64 。 |
AllocationKind |
win:UInt32 |
0x0 - 小型对象分配(小型对象堆中的分配)。0x1 - 大型对象分配(大型对象堆中的分配)。 |
AllocationAmount64 |
win:UInt64 |
分配大小(以字节为单位)。 对于非常大的分配,此值为精确值。 |
TypeId |
win:Pointer |
MethodTable 的地址。 如果在此事件期间分配了几种类型的对象,则此地址为对应于分配的最后一个对象(导致超过 100 KB 阙值的对象)的 MethodTable 地址。 |
TypeName |
win:UnicodeString |
已分配的类型的名称。 如果在此事件期间分配了几种类型的对象,则此地址为对应于分配的最后一个类型(导致超过 100 KB 阙值的对象)。 |
HeapIndex |
win:UInt32 |
此对象所分配到的堆。 与工作站垃圾回收一起运行时,此值为 0(零)。 |
Address |
win:Pointer |
上次分配的对象的地址。 |
ClrInstanceID |
win:UInt16 |
CoreCLR 实例的唯一 ID。 |
GCCreateConcurrentThread_V1 事件
下表显示了关键字和级别:
引发事件的关键字 | Level |
---|---|
GCKeyword (0x1) |
信息性 (4) |
ThreadingKeyword (0x10000) |
信息性 (4) |
下表显示了事件信息:
事件 | 事件 ID | 在发生以下情况时引发 |
---|---|---|
GCCreateConcurrentThread_V1 |
11 | 已创建并发垃圾回收线程。 |
此事件没有任何事件数据。
GCTerminateConcurrentThread_V1 事件
下表显示了关键字和级别:
引发事件的关键字 | Level |
---|---|
GCKeyword (0x1) |
信息性 (4) |
ThreadingKeyword (0x10000) |
信息性 (4) |
下表显示了事件信息:
事件 | 事件 ID | 在发生以下情况时引发 |
---|---|---|
GCTerminateConcurrentThread_V1 |
12 | 已终止并发垃圾回收线程。 |
此事件没有任何事件数据。
GCFinalizersBegin_V1 事件
下表显示了关键字和级别:
引发事件的关键字 | Level |
---|---|
GCKeyword (0x1) |
信息性 (4) |
下表显示了事件信息:
事件 | 事件 ID | 在发生以下情况时引发 |
---|---|---|
GCFinalizersBegin_V1 |
14 | 开始运行终结器。 |
此事件没有任何事件数据。
GCFinalizersEnd_V1 事件
下表显示了关键字和级别:
引发事件的关键字 | Level |
---|---|
GCKeyword (0x1) |
信息性 (4) |
下表显示了事件信息:
事件 | 事件 ID | 在发生以下情况时引发 |
---|---|---|
GCFinalizersEnd_V1 |
13 | 结束运行终结器。 |
下表显示了事件数据:
字段名 | 数据类型 | 说明 |
---|---|---|
Count |
win:UInt32 |
运行的终结器数。 |
ClrInstanceID |
win:UInt16 | CLR 或 CoreCLR 的实例的唯一 ID。 |
SetGCHandle 事件
下表显示了关键字和级别:
引发事件的关键字 | Level |
---|---|
GCHandleKeyword (0x2) |
信息性 (4) |
下表显示了事件信息:
事件 | 事件 ID | 在发生以下情况时引发 |
---|---|---|
SetGCHandle |
30 | 已设置 GC 句柄。 |
下表显示了事件数据:
字段名 | 数据类型 | 说明 |
---|---|---|
HandleID |
win:Pointer |
已分配的句柄的地址。 |
ObjectID |
win:Pointer |
创建了句柄的对象的地址。 |
Kind |
win:UInt32 |
已设置的 GC 句柄的类型。 0x0 :WeakShort 0x1 :WeakLong 0x2 :Strong 0x3 :Pinned 0x4 :Variable0x5 :RefCounted 0x6 :Dependent0x7 :AsyncPinned0x8 :SizedRef |
Generation |
win:UInt32 |
创建了其句柄的对象的生成。 |
AppDomainID |
win:UInt64 |
AppDomain ID。 |
ClrInstanceID |
win:UInt16 |
CoreCLR 实例的唯一 ID。 |
DestroyGCHandle 事件
下表显示了关键字和级别:
引发事件的关键字 | Level |
---|---|
GCHandleKeyword (0x2) |
信息性 (4) |
下表显示了事件信息:
事件 | 事件 ID | 在发生以下情况时引发 |
---|---|---|
DestroyGCHandle |
31 | 已销毁 GC 句柄。 |
下表显示了事件数据:
字段名 | 数据类型 | 说明 |
---|---|---|
HandleID |
win:Pointer |
已销毁的句柄的地址。 |
ClrInstanceID |
win:UInt16 | CoreCLR 实例的唯一 ID。 |
PinObjectAtGCTime 事件
下表显示了关键字和级别:
引发事件的关键字 | Level |
---|---|
GCKeyword (0x1) |
详细级别 (5) |
下表显示了事件信息:
事件 | 事件 ID | 在发生以下情况时引发 |
---|---|---|
PinObjectAtGCTime |
33 | 对象在 GC 期间已固定。 |
下表显示了事件数据:
字段名 | 数据类型 | 说明 |
---|---|---|
HandleID |
win:Pointer |
句柄的地址。 |
ObjectID |
win:Pointer |
已固定对象的地址。 |
ObjectSize |
win:UInt64 |
已固定对象的大小。 |
TypeName |
win:UnicodeString |
已固定对象的类型的名称。 |
ClrInstanceID |
win:UInt16 |
CoreCLR 实例的唯一 ID。 |
GCTriggered 事件
下表显示了关键字和级别:
引发事件的关键字 | Level |
---|---|
GCKeyword (0x1) |
详细级别 (5) |
下表显示了事件信息:
事件 | 事件 ID | 在发生以下情况时引发 |
---|---|---|
GCTriggered |
35 | 已触发 GC。 |
下表显示了事件数据:
字段名 | 数据类型 | 说明 |
---|---|---|
Reason |
win:UInt32 |
触发 GC 的原因。0x0 :AllocSmall0x1 :Induced 0x2 :LowMemory 0x3 :Empty 0x4 :AllocLarge 0x5 :OutOfSpaceSmallObjectHeap 0x6 :OutOfSpaceLargeObjectHeap 0x7 :InducedNoForce 0x8 :Stress 0x9 :InducedLowMemory |
ClrInstanceID |
win:UInt16 |
CoreCLR 实例的唯一 ID。 |
IncreaseMemoryPressure 事件
下表显示了关键字和级别:
引发事件的关键字 | Level |
---|---|
GCKeyword (0x1) |
信息 (4) |
下表显示了事件信息:
事件 | 事件 ID | 在发生以下情况时引发 |
---|---|---|
IncreaseMemoryPressure |
200 | 内存压力增加。 |
下表显示了事件数据:
字段名称 | 数据类型 | 说明 |
---|---|---|
ClrInstanceID |
win:UInt16 | CoreCLR 实例的唯一 ID。 |
DecreaseMemoryPressure 事件
下表显示了关键字和级别:
引发事件的关键字 | Level |
---|---|
GCKeyword (0x1) |
信息 (4) |
下表显示了事件信息:
事件 | 事件 ID | 在发生以下情况时引发 |
---|---|---|
DecreaseMemoryPressure |
201 | 内存压力降低。 |
下表显示了事件数据:
字段名称 | 数据类型 | 说明 |
---|---|---|
BytesFreed |
win:UInt32 |
已释放字节。 |
ClrInstanceID |
win:UInt16 |
CoreCLR 实例的唯一 ID。 |
GCMarkWithType 事件
下表显示了关键字和级别:
引发事件的关键字 | Level |
---|---|
GCKeyword (0x1) |
信息 (4) |
下表显示了事件信息:
事件 | 事件 ID | 在发生以下情况时引发 |
---|---|---|
GCMarkWithType |
202 | GC 标记阶段期间已标记了一个 GC 根。 |
下表显示了事件数据:
字段名称 | 数据类型 | 说明 |
---|---|---|
HeapNum |
win:UInt32 |
堆号。 |
ClrInstanceID |
win:UInt16 | CoreCLR 实例的唯一 ID。 |
Type |
win:UInt32 |
GC 根类型。0x0 :Stack0x1 :Finalizer0x2 :Handle0x3 :Older0x4 :SizedRef0x5 :Overflow |
Bytes |
win:UInt64 |
已标记的字节数。 |
GCJoin_V2 事件
下表显示了关键字和级别:
引发事件的关键字 | Level |
---|---|
GCKeyword (0x1) |
详细级别 (5) |
下表显示了事件信息:
事件 | 事件 ID | 在发生以下情况时引发 |
---|---|---|
GCJoin_V2 |
203 | 已联接的 GC 线程。 |
下表显示了事件数据:
字段名 | 数据类型 | 说明 |
---|---|---|
Heap |
win:UInt32 |
堆号 |
JoinTime |
win:UInt32 |
指示在联接开始或结束时是否触发此事件(0x0 为联接开始,0x1 为联接结束) |
JoinType |
win:UInt32 |
联接类型。 0x0 :Last Join0x1 :Join 0x2 :Restart 0x3 :First Reverse Join0x4 :Reverse Join |
ClrInstanceID |
win:UInt16 |
CoreCLR 实例的唯一 ID。 |