Linux查看磁盘I/O性能,iostat命令详解
前言
服务器变慢了,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队列长度 | 越大说明排队越严重 |
最重要的两个指标:
%util:如果接近100%,说明磁盘已经跑满了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性能的核心命令:
- iostat:快速看磁盘整体读写情况
- iostat -x 2:实时监控,重点看
%util和await - vmstat 1:看
wa列,确认是不是I/O瓶颈
记住两个关键指标:
%util接近100%:磁盘跑满了await超过20ms:磁盘响应慢了
遇到问题加QQ23979811 协助处理