我正在使用WMI查询远程计算机的当前和平均磁盘队列长度,以便能够监视硬盘上的负载。 查询如下:
select CurrentDiskQueueLength, AvgDiskQueueLength, Name from win32_perfformatteddata_perfdisk_physicaldisk
我得到的结果是混乱的; 我发现,与当前磁盘队列长度相比,我得到的总体(即对于Name = _Total)平均磁盘队列长度的结果一致(太高!)。 这个图如下:

其中紫色线对应于总平均磁盘队列长度,绿线对应于当前磁盘队列长度。
所以我的问题:如何计算平均磁盘队列长度? 如果我假设平均磁盘队列长度是通过取得过去的几个“当前”值并取这些值的平均值来计算的,那么它怎么会比当前的磁盘队列长度高得多呢? 平均值是否取决于我运行此查询的频率?
这看起来很奇怪。 如果使用Perfmonlogging相同的数据,那么perfmon返回的值与WMI脚本返回的值相同? 如果没有,这是WMI(或当然你的脚本;-))的问题。
JR
当你询问当前值时,你会得到当前的队列长度:没有别的。 当你询问平均数时,你会得到队列长度的平均值,它取决于Windows使用的时间。
如果在两次“当前”读数之间出现了突然爆发的活动(无论是短暂的非常大爆发,还是较低但较长的爆发),这可能会反映在平均水平上,但除非现在爆发的活动爆发,根本不在当前值。
即使三四读数的平均值很高,你仍然可以得到“当前”一致的值,但是由于电stream有时高于平均值,我认为读数是正确的。
我不确定平均所用的时间段是多less,但是如果您在MSDN站点中search确切的计数器名称,则可能会发现它。
这些价值观不是直截了当,有意义的。 他们必须解释。 来自O'Reilly在Windows 2000上的6大常见问题磁盘性能 :
平均 磁盘队列长度计数器来源于Avg。 磁盘秒/传输乘以磁盘传输/秒,这是设备的平均响应乘以I / O速率。 再次,这相当于一个众所周知的叫做Little's Law的排队论定理,它指出:
N = A * Sr
其中N是系统中待处理请求的数量,A是请求的到达率,Sr是响应时间。 所以平均。 磁盘队列长度计数器是(逻辑或物理)磁盘未完成请求数的估计值。