/ Performance,Windows / 69浏览

性能监视器的计数器解析(二)- 物理磁盘

引入

在做性能分析的时候,Windows 中自带的 Performance Monitor 非常有效,可以用来分析一些非常复杂的性能问题。
PhysicalDisk counter iamge
其他计数器解析:

物理磁盘相关计数器

计数器名称 含义 用法 补充说明
\PhysicalDisk\Current Disk Queue Length 当前等待磁盘 I/O 请求的队列长度,即队列中尚未完成的磁盘 I/O 请求数。 反映磁盘繁忙程度和 I/O 请求堆积情况。如果值持续过高,表明磁盘成为系统瓶颈。 通常和 Avg. Disk Queue Length、% Disk Time 等其他指标配合使用,以便精确判断磁盘是否存在性能瓶颈。
\PhysicalDisk\% Disk Time 磁盘处于活动状态的百分比,表示磁盘花费在读写操作上的时间占比。 用于判断磁盘是否处于高负载状态。当该值接近 100% 时,说明磁盘在大部分时间里都在处理请求,可能存在磁盘瓶颈。 当磁盘使用了多队列或多核环境下,其准确度可能受影响,最好结合 Avg. Disk Queue Length 一起分析。
\PhysicalDisk\Avg. Disk Queue Length 平均磁盘队列长度,表示磁盘在收集间隔内平均积压的 I/O 请求数。 用于衡量磁盘负载。当该值长期大于磁盘可支持的队列数时,说明磁盘 I/O 压力大,需考虑优化或升级硬件。 需要结合磁盘类型(如 HDD/SSD)和具体应用场景来评估合理范围。
\PhysicalDisk\% Disk Read Time 磁盘处于读操作状态的时间占比。 用于评估读操作在整体磁盘活动中所占的比重。如果该值高,说明当前主要的负载是读请求。 可以与 % Disk Write Time 对比,来区分读写负载分布。
\PhysicalDisk\Avg. Disk Read Queue Length 平均磁盘读队列长度,表示磁盘在收集间隔内平均等待进行的读操作请求数。 当该值过大时,表明磁盘正在等待大量读取请求,可能导致读取延迟较高。 需要结合磁盘的读速率与应用对读性能的需求进行判断。
\PhysicalDisk\% Disk Write Time 磁盘处于写操作状态的时间占比。 用于评估写操作在整体磁盘活动中所占的比重。如果该值高,说明当前主要负载是写请求。 与 % Disk Read Time 对比,可以帮助了解系统主要在执行读还是写操作,从而进行针对性的优化(如调整读/写缓存策略)。
\PhysicalDisk\Avg. Disk Write Queue Length 平均磁盘写队列长度,表示磁盘在收集间隔内平均等待进行的写操作请求数。 当该值过大时,表明磁盘正在等待大量写入请求,可能导致写入延迟较高。 与磁盘类型和写缓存机制有较大关联,某些 SSD 在写入性能上更好,但也需要配合其他指标一同分析。
\PhysicalDisk\Avg. Disk sec/Transfer 每次传输(读或写)平均所需的秒数。 测量磁盘整体响应能力,值越小表示磁盘响应越快。 如果该值持续升高,通常意味着磁盘出现较大的延迟,可能是因为队列过长或磁盘本身存在故障。
\PhysicalDisk\Avg. Disk sec/Read 每次读操作平均所需的秒数。 测量磁盘读操作的响应能力,值越小表示读操作越快。 若出现持续上升,可能说明磁盘读性能下降或读队列较长。
\PhysicalDisk\Avg. Disk sec/Write 每次写操作平均所需的秒数。 测量磁盘写操作的响应能力,值越小表示写操作越快。 若出现持续上升,可能说明磁盘写性能下降或存在写缓冲瓶颈。
\PhysicalDisk\Disk Transfers/sec 每秒执行的磁盘传输(读写总和)次数。 反映磁盘 I/O 吞吐量的一个重要指标,可用来判断应用程序的读写需求是否超出磁盘能力。 与应用负载模式密切相关。通常在数据库或高 I/O 的场景下非常关键。
\PhysicalDisk\Disk Reads/sec 每秒执行的磁盘读操作次数。 反映系统在一段时间内的读需求量,可用来识别读密集型应用或操作。 与 Disk Writes/sec 对比可以帮助定位系统是读密集还是写密集。
\PhysicalDisk\Disk Writes/sec 每秒执行的磁盘写操作次数。 反映系统在一段时间内的写需求量,可用来识别写密集型应用或操作。 建议结合磁盘类型、I/O 模式以及缓存策略来评估写操作的影响。
\PhysicalDisk\Disk Bytes/sec 每秒执行的读写字节总数。 反映磁盘每秒传输的数据量(读写合计),用来衡量磁盘带宽使用情况。 与网络带宽以及系统总数据吞吐需求相关,可用于评估整体 I/O 流量和带宽。
\PhysicalDisk\Disk Read Bytes/sec 每秒读取的字节数。 评估磁盘读操作的吞吐量,判断是否存在读带宽不足的问题。 结合 Avg. Disk Bytes/Read 可以分析每次读请求的平均大小。
\PhysicalDisk\Disk Write Bytes/sec 每秒写入的字节数。 评估磁盘写操作的吞吐量,判断是否存在写带宽不足的问题。 结合 Avg. Disk Bytes/Write 可以分析每次写请求的平均大小。
\PhysicalDisk\Avg. Disk Bytes/Transfer 每次传输(读或写)的平均字节数。 反映一次 I/O 操作中平均传输的数据大小。可与磁盘块大小或应用访问模式对比,判断是否为小块随机 I/O 还是大块顺序 I/O。 当该值过大或过小时,都可能暗示应用和磁盘之间的 I/O 模式需要优化,比如调整文件系统或应用的数据块大小。
\PhysicalDisk\Avg. Disk Bytes/Read 每次读操作的平均字节数。 主要用于分析读取模式,如果值较大,可能是顺序读居多;如果值较小,可能是随机读或小块访问居多。 与应用访问模式和文件系统的配置关系紧密。
\PhysicalDisk\Avg. Disk Bytes/Write 每次写操作的平均字节数。 主要用于分析写入模式,如果值较大,可能是顺序写居多;如果值较小,可能是随机写或小块写居多。 一些场景下配合写缓冲策略可以改善写操作效率。
\PhysicalDisk\% Idle Time 磁盘空闲时间占比,表示磁盘没有处理任何读写请求的时间比率。 当 % Idle Time 和 % Disk Time 相互印证时,可更准确判断磁盘利用率。如果 % Idle Time 高,说明磁盘整体较闲;反之则说明磁盘繁忙。 该指标在多核、多队列、RAID 或虚拟化环境中可能出现一定程度的误差,建议结合其他指标进行分析。
\PhysicalDisk\Split IO/Sec 磁盘分裂 I/O 的次数。一次原本的 I/O 请求在到达驱动层或磁盘层时,因对齐或其它原因被拆分成多个更小的 I/O 请求,即 Split IO。 如果值过高,意味着大量 I/O 被拆分,可能影响整体 I/O 性能。可尝试调整文件系统对齐、分区对齐或优化数据结构来降低 Split IO。 常见于磁盘分区未对齐或文件系统分配策略不合理时。可结合 Avg. Disk Bytes/Transfer、磁盘分区信息进行分析。

补充说明

  1. 结合多个指标进行分析

    • 单独一个指标可能不足以准确判断磁盘是否是系统的瓶颈,通常需要结合 磁盘队列长度(如 Current/Avg. Disk Queue Length)、磁盘使用率(如 % Disk Time、% Idle Time)以及 吞吐量(如 Disk Transfers/sec、Disk Bytes/sec)等多个指标来综合分析。
  2. 不同磁盘类型的差异

    • 对于传统机械硬盘(HDD)和固态硬盘(SSD),同一个指标的参考范围和瓶颈判断标准会有所不同。一般情况下,SSD 具备更好的随机读写性能和更低的平均响应时间。
  3. 系统和应用层面的影响

    • 某些操作系统、文件系统以及应用本身会对磁盘 I/O 进行缓存和优化,例如写缓冲、预读等机制。此时,原始计数器值可能会与实际应用层感知到的性能存在差异,需要结合应用日志或其他高级监控手段来做进一步排查。
  4. 性能测试和基准对比

    • 建议结合一致的基准测试场景(如 Iometer、FIO 等测试工具),获取磁盘的理想性能指标,再与实际生产环境下的监控数据进行对比,找出性能差距并持续优化。
  5. 持续监控与告警

    • 最好利用长期监控工具(如 PerfMon、Prometheus、Grafana 等)并设置合理的警戒阈值,出现异常时及时告警。这样更易于快速定位问题,避免磁盘性能瓶颈对业务造成严重影响。
如何通过 C++ 实时监听 ETW 事件
如何通过 C++ 实时监听 ETW 事件
【译】调查并确定 Windows 运行速度变慢问题
【译】调查并确定 Windows 运行速度变慢问题
【译】丢失的 WPA 文档 —— 磁盘使用
【译】丢失的 WPA 文档 —— 磁盘使用
【译】丢失的 WPA 文档 —— CPU 调度
【译】丢失的 WPA 文档 —— CPU 调度
【译】丢失的 WPA 文档 —— CPU 采样
【译】丢失的 WPA 文档 —— CPU 采样
如何通过 PDH(Performance Data Helper) 获取性能计数器的值

1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注