线程池 ETW 事件
这些事件收集有关工作线程和 I/O 线程的信息。
存在两组线程池事件:
工作线程池事件
这些事件与运行时工作线程池相关,并提供有关线程事件的通知(例如,创建或停止线程时)。 工作线程池使用自适应算法进行并发控制,其中的线程数基于测得的吞吐量来计算。 工作线程池事件可用于了解应用程序如何使用线程池,以及某些工作负荷可能会对并发控制怎样的影响。
ThreadPoolWorkerThreadStart 和 ThreadPoolWorkerThreadStop
下表显示这些事件的关键字和级别。 (有关详细信息,请参阅 CLR ETW Keywords and Levels。)
引发事件的关键字 | Level |
---|---|
ThreadingKeyword (0x10000) |
信息性 (4) |
下表显示了事件信息。
事件 | 事件 ID | 在发生以下情况时引发 |
---|---|---|
ThreadPoolWorkerThreadStart |
50 | 创建工作线程。 |
ThreadPoolWorkerThreadStop |
51 | 停止工作线程。 |
ThreadPoolWorkerThreadRetirementStart |
52 | 停用工作线程。 |
ThreadPoolWorkerThreadRetirementStop |
53 | 停用的工作线程再次变为活动状态。 |
下表显示了事件数据。
字段名 | 数据类型 | 说明 |
---|---|---|
ActiveWorkerThreadCount | win:UInt32 | 可用于处理工作的工作线程数,包括已在处理工作的工作线程。 |
RetiredWorkerThreadCount | win:UInt32 | 不能用于处理工作但被保留以防之后需要更多线程的工作线程数。 |
ClrInstanceID | Win:UInt16 | CLR 或 CoreCLR 的实例的唯一 ID。 |
ThreadPoolWorkerThreadAdjustment
这些线程池事件提供用于了解和调试线程注入(并发控制)算法行为的信息。 这些信息由工作线程池在内部使用。
ThreadPoolWorkerThreadAdjustmentSample
下表显示了关键字和级别。
引发事件的关键字 | Level |
---|---|
ThreadingKeyword (0x10000) |
信息性 (4) |
下表显示了事件信息。
事件 | 事件 ID | 说明 |
---|---|---|
ThreadPoolWorkerThreadAdjustmentSample |
54 | 指一个示例的信息收集,即具有一定并发级别的即时吞吐量测量。 |
下表显示了事件数据。
字段名 | 数据类型 | 说明 |
---|---|---|
吞吐量 | win:Double | 每个时间单位的完成数。 |
ClrInstanceID | Win:UInt16 | CLR 或 CoreCLR 的实例的唯一 ID。 |
ThreadPoolWorkerThreadAdjustmentAdjustment
下表显示了关键字和级别。
引发事件的关键字 | Level |
---|---|
ThreadingKeyword (0x10000) |
信息性 (4) |
下表显示了事件信息。
事件 | 事件 ID | 说明 |
---|---|---|
ThreadPoolWorkerThreadAdjustmentAdjustment |
55 | 当线程注入(爬山)算法确定并发级别发生更改时,在控件中记录更改。 |
下表显示了事件数据。
字段名 | 数据类型 | 说明 |
---|---|---|
AverageThroughput | win:Double | 测量示例的平均吞吐量。 |
NewWorkerThreadCount | win:UInt32 | 新的活动工作线程数。 |
原因 | win:UInt32 | 调整的原因。 0x00 - 预热。 0x01 - 初始化。 0x02 - 随机移动。 0x03 - 攀移。 0x04 - 更改点。 0x05 - 稳定。 0x06 - 匮乏。 0x07 - 线程已超时。 |
ClrInstanceID | Win:UInt16 | CLR 或 CoreCLR 的实例的唯一 ID。 |
ThreadPoolWorkerThreadAdjustmentStats
下表显示了关键字和级别。
引发事件的关键字 | Level |
---|---|
ThreadingKeyword (0x10000) |
信息性 (4) |
下表显示了事件信息。
事件 | 事件 ID | 说明 |
---|---|---|
ThreadPoolWorkerThreadAdjustmentStats |
56 | 在线程池上收集数据。 |
下表显示了事件数据。
字段名 | 数据类型 | 说明 |
---|---|---|
持续时间 | win:Double | 收集这些统计信息的时间量(以秒为单位)。 |
吞吐量 | win:Double | 在此间隔期间每秒完成的平均数量。 |
ThreadWave | win:Double | 保留以供内部使用。 |
ThroughputWave | win:Double | 保留以供内部使用。 |
ThroughputErrorEstimate | win:Double | 保留以供内部使用。 |
ThroughputErrorEstimate | win:Double | 保留以供内部使用。 |
ThroughputWave | win:Double | 在此间隔期间因活动工作线程计数变化导致的相对吞吐量变化。 |
置信度 | win:Double | ThroughputRatio 字段的有效性测量。 |
NewcontrolSetting | win:Double | 将作为活动线程计数未来变化基线的活动工作线程数。 |
NewThreadWaveMagnitude | Win:UInt16 | 活动线程计数的未来变化量值。 |
ClrInstanceID | Win:UInt16 | CLR 或 CoreCLR 的实例的唯一 ID。 |
I/O 线程事件
这些线程池事件针对 I/O 线程池(完成端口)中的线程发生,该过程是异步的。
IOThreadCreate_V1
下表显示了关键字和级别。
引发事件的关键字 | Level |
---|---|
ThreadingKeyword (0x10000) |
信息性 (4) |
下表显示了事件信息。
事件 | 事件 ID | 在发生以下情况时引发 |
---|---|---|
IOThreadCreate_V1 |
44 | 在线程池中创建 I/O 线程。 |
下表显示了事件数据。
字段名 | 数据类型 | 说明 |
---|---|---|
计数 | win:UInt64 | I/O 线程数,包括新创建的线程。 |
NumRetired | win:UInt64 | 已停用的工作线程数。 |
ClrInstanceID | Win:UInt16 | CLR 或 CoreCLR 的实例的唯一 ID。 |
IOThreadRetire_V1
下表显示了关键字和级别。
引发事件的关键字 | Level |
---|---|
ThreadingKeyword (0x10000) |
信息性 (4) |
下表显示了事件信息。
事件 | 事件 ID | 在发生以下情况时引发 |
---|---|---|
IOThreadRetire_V1 |
46 | I/O 线程变为停用候选项。 |
下表显示了事件数据。
字段名 | 数据类型 | 说明 |
---|---|---|
计数 | win:UInt64 | 线程池中剩余的 I/O 线程数。 |
NumRetired | win:UInt64 | 已停用的 I/O 线程数。 |
ClrInstanceID | Win:UInt16 | CLR 或 CoreCLR 的实例的唯一 ID。 |
IOThreadUnretire_V1
下表显示了关键字和级别。
引发事件的关键字 | Level |
---|---|
ThreadingKeyword (0x10000) |
信息性 (4) |
下表显示了事件信息。
事件 | 事件 ID | 在发生以下情况时引发 |
---|---|---|
IOThreadUnretire_V1 |
47 | I/O 线程因在该线程变为停用候选项后的等待期间内达到 I/O 而恢复使用。 |
下表显示了事件数据。
字段名 | 数据类型 | 说明 |
---|---|---|
计数 | win:UInt64 | 线程池中的 I/O 线程数,包括这一个。 |
NumRetired | win:UInt64 | 已停用的 I/O 线程数。 |
ClrInstanceID | Win:UInt16 | CLR 或 CoreCLR 的实例的唯一 ID。 |
IOThreadTerminate
下表显示了关键字和级别。
引发事件的关键字 | Level |
---|---|
ThreadingKeyword (0x10000) |
信息性 (4) |
下表显示了事件信息。
事件 | 事件 ID | 在发生以下情况时引发 |
---|---|---|
IOThreadTerminate |
45 | 在线程池中终止 I/O 线程。 |
下表显示了事件数据。
字段名 | 数据类型 | 说明 |
---|---|---|
计数 | win:UInt64 | 线程池中剩余的 I/O 线程数。 |
NumRetired | win:UInt64 | 已停用的 I/O 线程数。 |
ClrInstanceID | Win:UInt16 | CLR 或 CoreCLR 的实例的唯一 ID。 |