线程池 ETW 事件

这些事件可收集有关辅助线程和 I/O 线程的信息。

有两组线程池事件:

  • 辅助线程池事件,这些事件提供有关应用程序如何使用线程池以及工作负荷对并发控制的影响的信息。

  • I/O 线程池事件,这些事件提供有关线程池中创建的、撤消的、取消撤消的或终止的 I/O 线程的信息。

辅助线程池事件

这些事件与运行时的辅助线程池有关,并提供有关线程事件的通知(例如,当创建或停止线程时)。 辅助线程池使用自适应算法进行并发控制,其中线程数量基于测量的吞吐量计算得出。 可以使用辅助线程池事件来了解应用程序如何使用线程池,以及某些工作负荷对并发控制可能产生的影响。

ThreadPoolWorkerThreadStart 和 ThreadPoolWorkerThreadStop

下表显示了这些事件的关键字和级别。 (有关更多信息,请参见 CLR ETW 关键字和级别。)

用于引发事件的关键字

级别

ThreadingKeyword (0x10000)

信息性 (4)

下表显示事件信息。

Event

事件 ID

在以下情况下引发

ThreadPoolWorkerThreadStart

50

创建辅助线程。

ThreadPoolWorkerThreadStop

51

停止辅助线程。

ThreadPoolWorkerThreadRetirementStart

52

撤消辅助线程。

ThreadPoolWorkerThreadRetirementStop

53

撤消的辅助线程再次变为活动状态。

下表显示事件数据。

字段名

数据类型

说明

ActiveWorkerThreadCount

win:UInt32

可用于处理工作的辅助线程的数目,包括已在处理工作的线程。

RetiredWorkerThreadCount

win:UInt32

不可用于处理工作的辅助线程的数目,但保留的这些线程是为了防止以后需要更多的线程。

ClrInstanceID

Win:UInt16

CLR 或 CoreCLR 的实例的唯一 ID。

ThreadPoolWorkerThreadAdjustment

这些线程池事件提供有助于理解和调试线程注入(并发控制)算法的信息。 该信息由辅助线程池在内部使用。

ThreadPoolWorkerThreadAdjustmentSample

下表显示关键字和级别。

用于引发事件的关键字

级别

ThreadingKeyword (0x10000)

信息性 (4)

下表显示事件信息。

Event

事件 ID

说明

ThreadPoolWorkerThreadAdjustmentSample

54

指示针对一个示例的信息收集;即,在某一时刻内特定并发级别的吞吐量的度量值。

下表显示事件数据。

字段名

数据类型

说明

Throughput

win:Double

每单位时间的完成数目。

ClrInstanceID

Win:UInt16

CLR 或 CoreCLR 的实例的唯一 ID。

ThreadPoolWorkerThreadAdjustmentAdjustment

下表显示关键字和级别。

用于引发事件的关键字

级别

ThreadingKeyword (0x10000)

信息性 (4)

下表显示事件信息。

Event

事件 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

下表显示关键字和级别。

用于引发事件的关键字

级别

ThreadingKeyword (0x10000)

信息性 (4)

下表显示事件信息。

Event

事件 ID

说明

ThreadPoolWorkerThreadAdjustmentStats

56

收集线程池上的数据。

下表显示事件数据。

字段名

数据类型

说明

持续时间

win:Double

收集这些统计信息所花费的时间量(以秒为单位)。

Throughput

win:Double

此时间间隔内每秒的平均完成数。

ThreadWave

win:Double

保留以供内部使用。

ThroughputWave

win:Double

保留以供内部使用。

ThroughputErrorEstimate

win:Double

保留以供内部使用。

AverageThroughputErrorEstimate

win:Double

保留以供内部使用。

ThroughputRatio

win:Double

在此时间间隔内由活动辅助线程计数的变化所导致的吞吐量的相关改进。

Confidence

win:Double

ThroughputRatio 字段的有效性度量结果。

NewcontrolSetting

win:Double

将作为活动线程计数中将来变化的基线的活动辅助线程的数目。

NewThreadWaveMagnitude

Win:UInt16

活动线程计数中将来变化的数量级。

ClrInstanceID

Win:UInt16

CLR 或 CoreCLR 的实例的唯一 ID。

返回页首

I/O 线程事件

以异步方式为 I/O 线程池(完成端口)中的线程引发这些线程池事件。

IOThreadCreate_V1

下表显示关键字和级别。

用于引发事件的关键字

级别

ThreadingKeyword (0x10000)

信息性 (4)

下表显示事件信息。

Event

事件 ID

在以下情况下引发

IOThreadCreate_V1

44

在线程池中创建 I/O 线程时。

下表显示事件数据。

字段名

数据类型

说明

计数

win:UInt64

包括最新创建的线程在内的 I/O 线程的数量。

NumRetired

win:UInt64

已撤消的辅助线程的数量。

ClrInstanceID

Win:UInt16

CLR 或 CoreCLR 的实例的唯一 ID。

IOThreadRetire_V1

下表显示关键字和级别。

用于引发事件的关键字

级别

ThreadingKeyword (0x10000)

信息性 (4)

下表显示事件信息。

Event

事件 ID

在以下情况下引发

IOThreadRetire_V1

46

在 I/O 线程变为撤消候选项时。

下表显示事件数据。

字段名

数据类型

说明

计数

win:UInt64

线程池中剩余的 I/O 线程数。

NumRetired

win:UInt64

已撤消的 I/O 线程的数量。

ClrInstanceID

Win:UInt16

CLR 或 CoreCLR 的实例的唯一 ID。

IOThreadUnretire_V1

下表显示关键字和级别。

用于引发事件的关键字

级别

ThreadingKeyword (0x10000)

信息性 (4)

下表显示事件信息。

Event

事件 ID

在以下情况下引发

IOThreadUnretire_V1

47

当由于 I/O 在线程变为撤消候选项后的等待周期内到达而导致取消撤消 I/O 线程时。

下表显示事件数据。

字段名

数据类型

说明

计数

win:UInt64

线程池中包括这一个线程在内的 I/O 线程的数量。

NumRetired

win:UInt64

已撤消的 I/O 线程的数量。

ClrInstanceID

Win:UInt16

CLR 或 CoreCLR 的实例的唯一 ID。

IOThreadTerminate

下表显示关键字和级别。

用于引发事件的关键字

级别

ThreadingKeyword (0x10000)

信息性 (4)

下表显示事件信息。

Event

事件 ID

在以下情况下引发

IOThreadTerminate

45

在线程池中创建 I/O 线程时。

下表显示事件数据。

字段名

数据类型

说明

计数

win:UInt64

线程池中剩余的 I/O 线程数。

NumRetired

win:UInt64

已撤消的 I/O 线程的数量。

ClrInstanceID

Win:UInt16

CLR 或 CoreCLR 的实例的唯一 ID。

返回页首

请参见

概念

CLR ETW 事件