我们的服务器很忙,IO 负载很高,至少我的感觉是这样的。输出iostat -xz
如下:
extended device statistics
device r/s w/s kr/s kw/s wait actv svc_t %w %b
sd5 224.8 157.8 10701.8 6114.7 0.0 9.5 24.7 0 100
sd5 243.2 110.4 11565.3 4065.0 0.0 9.7 27.5 0 100
很明显,磁盘子系统已超载,因为对于 6 驱动器 SATA 阵列而言,25ms 的服务时间是不可接受的,而 100% 的繁忙也意味着我们的磁盘 IO 被堵塞了。
但是 - 为什么总是wait
?0.0
为什么%w
也是 0?%w
有时会变为1
,然后很快返回0
。这是否意味着没有进程在等待 IO?
RAID 控制器是否会以某种方式导致此结果/掩盖等待时间?
有人可以解释这种行为吗?
答案1
svc_t 时间以毫秒为单位测量“往返”:
操作系统的“底层” - 磁盘子系统 - 操作系统的“底层”
“100% 繁忙意味着磁盘 IO 拥堵”这一说法并不完全正确。这意味着磁盘 100% 的时间都在忙于做某事,并不一定意味着它不能做更多的事情,也不一定意味着它不能及时处理请求(这是一个微妙的区别)。
通常磁盘过载的症状是 %w 列和 actc 上的值较高(稳定超过 200)。
这可能是延迟问题吗?系统是否请求大量随机操作,导致控制器花费时间寻找第 6 个数据块?
答案2
是的,我认为你说的没错,RAID 控制器弄乱了数字。如果它在收到请求后立即告诉驱动程序操作已开始,则驱动程序将不知道它仍在等待 RAID 控制器内的磁盘硬件。你能直接从 RAID 控制器中提取统计数据吗?