Linux磁盘IO性能快速检测
老手群里经常有人问“机器IO咋样”,其实就几个命令的事。别整那些花里胡哨的,直接上干货。

1. 实时监控:iostat
最常用的工具,没有之一。
# 查看所有磁盘IO情况,每2秒刷新一次
iostat -x 2
# 只看某个盘,比如sda
iostat -x sda 2
重点关注这几个指标:
– %util:磁盘利用率,超过80%说明IO瓶颈了
– await:IO请求平均等待时间(ms),SSD一般<5ms,机械盘<20ms
– svctm:IO服务时间,比await小很多说明排队严重
– r/s w/s:每秒读写次数,机械盘通常不超过200
2. 定位IO高进程:iotop
知道磁盘忙,谁干的?iotop直接看。
# 安装
yum install iotop -y # CentOS
apt install iotop -y # Ubuntu
# 运行,按O排序,按P只看进程
iotop -oP
看到哪个进程读写高,直接kill -9或者查日志。注意iotop需要root权限。
3. 磁盘压力测试:fio
新机器到手,或者怀疑磁盘性能,直接压一把。
# 随机读测试,4K块大小,队列深度32
fio --name=randread --ioengine=libaio --iodepth=32 --rw=randread --bs=4k --direct=1 --size=1G --numjobs=1 --runtime=30
# 随机写测试
fio --name=randwrite --ioengine=libaio --iodepth=32 --rw=randwrite --bs=4k --direct=1 --size=1G --numjobs=1 --runtime=30
看结果里的IOPS和BW(带宽)。SSD随机读通常几万IOPS,机械盘几百。
4. 快速判断磁盘类型
不知道是SSD还是机械盘?
# 看旋转标志
cat /sys/block/sda/queue/rotational
# 1=机械盘,0=SSD
# 或者看型号
lsblk -d -o name,rota,model
5. 排查IO瓶颈三板斧
第一斧:看util
iostat -x 1 | grep -E "Device|sda"
如果%util接近100%,磁盘饱和。
第二斧:看await
iostat -x 1 | awk 'NR>2 {print $1, $10}'
await大于100ms,磁盘性能严重不足。
第三斧:看排队
iostat -x 1 | awk 'NR>2 {print $1, $4, $9}'
avgqu-sz(平均队列长度)大于2,说明IO请求在排队。
6. 快速修复
- util高,await低:IOPS瓶颈,换SSD或增加磁盘
- util高,await高:磁盘性能不够,换更快的盘
- util低,await高:可能是硬件问题或驱动bug,检查磁盘健康状态
- 随机读写慢:检查是否有大量小文件操作,考虑用tmpfs或调整文件系统参数
# 查看磁盘SMART信息
smartctl -a /dev/sda | grep -E "Reallocated|Pending|Uncorrect"
# 如果Reallocated_Sector_Ct > 0,赶紧备份数据
总结
别管什么玄学IO问题,就这三步:
1. iostat -x看整体
2. iotop -oP抓元凶
3. fio压测确认
搞定收工。
💻 安全运维 / Linux运维 / 渗透测试 技术支持
业务需求可联系博客作者
