«

Linux查看磁盘I/O性能,iostat命令详解

时间:2026-10-5 07:37     作者:emer     分类: 无


前言

服务器变慢了,CPU不高、内存也够,但就是卡。这时候就要看看是不是磁盘I/O瓶颈了。很多时候系统慢不是CPU不够,而是磁盘读写太慢,CPU一直在等磁盘。iostat 就是专门用来查看磁盘I/O性能的工具,配合 vmstat 一起用,能快速定位I/O问题。本文就详细讲一下 iostat 命令的使用。

安装 iostat

CentOS7 默认可能没装 iostat,先装一下:

yum install sysstat -y

iostat 属于 sysstat 包,装完就有了。

基本用法

直接输入:

iostat

输出示例:

Linux 3.10.0-1160.el7.x86_64 (localhost)    10/05/2026  _x86_64_    (2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           5.00    0.00    2.00    1.00    0.00   92.00

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               10.00        50.00       100.00     500000     1000000

输出详解

CPU 部分

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           5.00    0.00    2.00    1.00    0.00   92.00
列 含义
%user 用户态CPU占用
%nice 改变过优先级的进程占用
%system 内核态CPU占用
%iowait 等待磁盘I/O的CPU占比(重点看这个)
%steal 被虚拟机偷走的CPU
%idle 空闲CPU

重点看 %iowait: 如果这个值很高(比如超过20%),说明磁盘I/O是瓶颈,CPU大部分时间在等磁盘读写。

磁盘部分

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               10.00        50.00       100.00     500000     1000000
列 含义
Device 设备名
tps 每秒传输次数(IOPS)
kB_read/s 每秒读取的数据量
kB_wrtn/s 每秒写入的数据量
kB_read 总共读取的数据量
kB_wrtn 总共写入的数据量

实时监控

每2秒刷新一次

iostat 2

按 Ctrl+C 退出。

每2秒刷新一次,总共刷新5次

iostat 2 5

只看磁盘部分,不看CPU

iostat -d 2

更详细的磁盘统计

显示扩展统计信息

iostat -x

输出会多出很多列,这才是真正分析磁盘性能的关键:

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda              0.00     5.00    1.00    9.00    50.00   100.00    30.00     0.10    5.00    2.00    6.00   1.00   1.00

重点列说明:

列 含义 判断标准
await 平均I/O等待时间(毫秒) 超过20ms就要注意,超过100ms说明磁盘很慢
svctm 平均I/O服务时间(毫秒) 越小越好
%util 磁盘利用率 接近100%说明磁盘跑满了
avgqu-sz 平均I/O队列长度 越大说明排队越严重

最重要的两个指标:

  1. %util:如果接近100%,说明磁盘已经跑满了
  2. await:如果很大,说明每次I/O等待时间很长,磁盘很慢

常用参数组合

实时监控磁盘性能

iostat -x 2

每2秒刷新一次,显示扩展信息。

只看某个磁盘

iostat -x sda 2

以MB为单位显示

iostat -m

显示设备映射关系

iostat -N

实际排查案例

案例1:系统变慢,怀疑磁盘I/O

vmstat 1

看 wa 列,如果很高(超过20%),说明磁盘I/O是瓶颈。

然后用 iostat 详细看:

iostat -x 2

看 %util 是不是接近100%,await 是不是很大。

案例2:哪个磁盘跑得最忙

iostat -x 2

看 %util 列,哪个磁盘的 %util 最高,就是哪个磁盘是瓶颈。

案例3:读写比例

iostat -x 2

看 r/s 和 w/s,是读多还是写多,针对性优化。

常见坑

坑1:%util 100% 就以为磁盘坏了

%util 100% 说明磁盘在处理I/O请求,但不一定是磁盘性能不行。可能是I/O请求量太大,也可能是磁盘确实慢。要结合 await 一起看。

坑2:只看 tps 不看 await

tps 高不一定是问题,要看每次I/O的等待时间 await。如果 await 很小,说明磁盘处理得很快,tps高也没关系。

坑3:把 iowait 当成CPU问题

%iowait 高说明CPU在等磁盘,不是CPU不够用。这时候加CPU没用,要优化磁盘I/O。

总结

查看磁盘I/O性能的核心命令:

  1. iostat:快速看磁盘整体读写情况
  2. iostat -x 2:实时监控,重点看 %util 和 await
  3. vmstat 1:看 wa 列,确认是不是I/O瓶颈

记住两个关键指标:

遇到问题加QQ23979811 协助处理

标签: Linux 服务器运维 iostat 磁盘IO 性能监控