需使用Performance Counter中PhysicalDisk类的Disk Reads/sec和Disk Writes/sec计数器监控Windows每秒文件读写次数,单位为次/秒,实例名选_Total或具体磁盘,二者反映底层磁盘I/O请求频度而非数据量,配合Avg. Disk Queue Length可判断I/O瓶颈。
要监控windows系统每秒文件读写次数(即i/o操作频次,不是字节数),需使用performance counter中的physicaldisk类别下对应“每秒读/写操作数”的计数器,而非吞吐量类指标。关键在于区分“操作次数”与“数据量”,二者物理意义不同:前者反映i/o请求频度(如小文件高频访问),后者反映带宽占用。
核心计数器名称与含义
以下两个计数器直接提供每秒文件级I/O操作数(注意:是底层磁盘I/O请求次数,非应用层文件打开/关闭):
- Disk Reads/sec:每秒向磁盘发起的读取操作请求数(单位:次/秒)
- Disk Writes/sec:每秒向磁盘发起的写入操作请求数(单位:次/秒)
它们属于PhysicalDisk性能对象,实例名需指定为_Total(汇总所有物理磁盘)或具体盘符(如0 C:)。这些值不等于“每秒打开多少个文件”,而是驱动层实际提交的读/写命令数量,对识别随机小IO密集型负载(如数据库、杀毒扫描)特别有效。
在性能监视器(PerfMon)中添加并查看
图形化方式最直观,适合快速验证和长期趋势观察:
- 按Win + R,输入perfmon回车,打开性能监视器
- 右侧图表区域右键 → “添加计数器…”
- 在“性能对象”中选择PhysicalDisk
- 在下方列表中勾选Disk Reads/sec和Disk Writes/sec
- 实例选择_Total(或指定磁盘编号),点击“添加”→“确定”
- 图表将实时绘制曲线,纵轴单位为“次/秒”,可观察峰值是否超过磁盘理论IOPS上限(如SATA SSD约1万,NVMe可达数十万)
用C#代码获取实时数值
若需集成到自定义监控程序,使用PerformanceCounter类,注意两次采样逻辑:
- 创建计数器时必须指定完整路径:
new PerformanceCounter("PhysicalDisk", "Disk Reads/sec", "_Total") - NextValue()首次调用返回0或无效值,需间隔≥1秒后再次调用才获得真实速率
- 示例片段:
var readOps = new PerformanceCounter("PhysicalDisk", "Disk Reads/sec", "_Total"); readOps.NextValue(); // 初始化 Thread.Sleep(1000); float readsPerSec = readOps.NextValue(); // 单位:次/秒
结合Avg. Disk Queue Length判断是否瓶颈
仅看操作次数不够,还需看排队情况。若Disk Reads/sec或Disk Writes/sec持续很高,同时Avg. Disk Queue Length也长期>2(HDD)或>1(SSD),说明请求积压,磁盘已成瓶颈。这两个指标应联合分析——高操作频次+高队列长度,基本可确认是I/O能力不足,而非瞬时抖动。



















