Linux中: "通过 iostat 怎么判断硬盘是否存在I/O瓶颈"

硬盘 I/O 指的是对硬盘的读和写操作,使用 IOPS 来衡量硬盘的 IO 能力,假设某块硬盘每秒最多能处理100和写请求,如果单位时间内的写请求数接近这个数值,就会出现 IO 瓶颈。

如果出现 IO 瓶颈,后续的请求就会排队,最直观的感受就是系统卡顿。例如:执行一个查询操作,需要等很久才能返回查询结果。

通过 iostat 的这几个参数可以查看硬盘的IO状况

iostat -x 1

  • r_await:平均每个读请求,从提交 → 到完成的总耗时(单位:毫秒),机械硬盘小于20ms才正常

  • w_await:平均每个写请求,从提交 → 到完成的总耗时(单位:毫秒),机械硬盘小于20ms才正常

  • aqu-sz:当前正在 等待的 + 正在处理中 的请求数量,如果大于1,就有请求处理不过来了,开始排队了。

  • %iowait:判断 CPU 有没有被 I/O 拖慢,大于20% 就说明 CPU 受到硬盘IO瓶颈的影响了。

如何理解 %iowait:假设进程触发一个对硬盘的写操作后,CPU会进行调度,在 发出 I/O 请求后立即切换到其他进程执行。当CPU再次调度到这个进程时候,因为I/O 还没完成,下一步需要 I/O 返回的结果,所以进程无法继续执行,CPU虽然后继续切换到其他可执行进程,但是这段被浪费在该进程上的时间片就会被计入%iowait。

注意:iowait 只能判断“CPU 的时间是不是被 I/O 浪费了”。不能说“硬盘有 I/O 瓶颈但 iowait 低 → 系统就不会卡”。


通过 iostat 这几个字段判断硬盘情况的方法

  • r_await / w_await 很高:单个请求的读或写处理很慢。

  • aqu-sz 高:说明又很多请求排队了,磁盘处理不过来了

  • w_await 高 + aqu-sz 高 :硬盘存在写入瓶颈

  • r_await 高 + aqu-sz 高 :硬盘存在读取瓶颈


例如:硬盘处于瓶颈状态

posted on 2025-11-20 14:22  背对背依靠  阅读(2)  评论(0)    收藏  举报