如何使用dotnet-trace采集可在PerfView中查看的BLOCKED_TIME指标
dotnet-trace采集BLOCKED_TIME指标操作方案
正确采集命令
dotnet-trace collect -p <目标进程ID> --profile cpu-sampling --providers Microsoft-Windows-DotNETRuntime:0x40008001:5,Microsoft-Windows-Kernel-Process:0x10:4,Microsoft-Windows-Kernel-Thread:0x40:4
参数说明
<目标进程ID>:替换为你运行的.NET 5控制台应用的进程ID,可通过任务管理器详情页或者dotnet-trace ps命令查询--profile cpu-sampling:保留常规CPU采样数据,和PerfView原生采集的数据维度保持一致Microsoft-Windows-DotNETRuntime:0x40008001:5:开启.NET运行时线程、线程池相关事件,为BLOCKED_TIME指标的统计提供运行时上下文数据Microsoft-Windows-Kernel-Process:0x10:4、Microsoft-Windows-Kernel-Thread:0x40:4:开启内核层上下文切换事件,这是计算线程阻塞时间的核心数据源,PerfView的/threadTime参数本质也是开启这两类内核事件采集
注意事项
- 执行dotnet-trace命令的终端必须拥有管理员权限,否则无法捕获内核层事件,会导致最终采集的文件没有BLOCKED_TIME数据
- 建议先将dotnet-trace升级到最新稳定版,避免版本兼容问题,升级命令为
dotnet tool update --global dotnet-trace - 采集得到的
.nettrace文件可以直接拖入PerfView打开,在Thread Time Stacks标签页即可查看和PerfView原生采集一致的BLOCKED_TIME指标
内容的提问来源于stack exchange,提问作者Kiryl
相关产品推荐
相关产品推荐

