服务器IO流量的查看主要依赖 iostat、iotop、sar、dstat 等系统工具,结合 /proc/diskstats 接口可精确监控磁盘读写负载。
为什么要盯紧服务器IO流量
IO流量直接反映磁盘读写压力,影响数据库响应、网站加载和业务实时性,无论是自建机房还是云服务器,IO波动往往是故障前兆。简米科技作为2003年始创的IDC服务商,其23年行业沉淀中发现,超过一半的线上故障根因与IO排队有关,因此掌握IO流量查看命令,是运维的基本功。
实时IO监控命令详解
iostat:最基础的IO统计工具
iostat 来自 sysstat 包,多数Linux发行版默认安装,直接运行 iostat 能看到CPU信息和磁盘统计,但更常用的是针对特定设备:
iostat -x 1 5 # 每隔1秒输出一次扩展统计,共5次
-x显示扩展指标,包括r/s(读请求数)、w/s(写请求数)、rkB/s、wkB/s、await(平均IO等待时间)、svctm(服务时间)、%util(磁盘利用率)。%util接近100%,说明磁盘接近饱和;await远高于svctm则表示IO请求在排队。
示例输出解读:
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 0.00 0.00 0.50 1.00 16.00 32.00 64.00 0.01 6.67 5.00 7.50 4.00 0.60
这里 %util 只有0.6%,说明磁盘很空闲,如果数值超过80%,需要关注。
iotop:按进程追踪IO开销
iotop 类似 top,但针对磁盘IO,它需要 root 权限或 CAP_NET_ADMIN 能力,安装后使用:
iotop -o # 只显示实际有IO的进程 iotop -b -n 5 # 批处理模式,输出5次后退出
-o过滤无IO进程,避免杂乱。- 输出包含
TOTAL DISK READ和TOTAL DISK WRITE,以及每个进程的 IO 百分比。
- 当发现某个进程(如 mysqld)IO 占用异常高,可以结合
strace或lsof定位文件。
pidstat:按进程的IO统计
pidstat 同样来自 sysstat,可以按进程或线程输出IO:
pidstat -d 1 5 # 按进程显示磁盘IO,每秒一次,共5次
输出包含 kB_rd/s、kB_wr/s、spawn 等,适合在容器中或只想监控特定PID时使用。
dstat:全能型实时监控
dstat 可以同时展示CPU、内存、网络、磁盘IO,适合快速全貌判断:
dstat -d -D sda,sdb 1 10 # 只看指定磁盘的IO
也可以 dstat -cdnm 组合,dstat 的短板是历史数据不保留,但实时场景非常直观。
/proc/diskstats:原始数据接口
所有IO工具底层都读取 /proc/diskstats,直接查看文件可以获取最原始的累计值:
cat /proc/diskstats | grep sda
字段包括:主设备号、次设备号、设备名、读完成次数、读合并次数、读扇区数、读毫秒数、写完成次数……通过前后两次采样计算差值,就能得到瞬时IO流量,很多监控Agent(如Prometheus的node_exporter)正是基于此。
历史IO数据追踪与性能基线
sar:系统活动记录利器
sar -b 报告IO和传输速率,sar -d 报告每个块设备的统计,默认sysstat会每隔10分钟记录一次数据,保存在 /var/log/sysstat/ 或 /var/log/sa/。
sar -d -f /var/log/sa/sa01 # 查看某天的历史IO sar -d -s 14:00:00 -e 15:00:00 # 查看指定时间段的IO
输出包含 tps(每秒传输次数)、rkB/s、wkB/s、await 等,通过对比不同时间段的 await 和 %util,可以建立应用的IO基线,例如数据库服务器在业务高峰期的 await 通常维持在10ms以下,如果突然飙到30ms,则说明磁盘性能下降或请求量突增。
通过脚本持久化IO数据
简单写一个cron任务,把 iostat -x 的输出追加到日志文件,后期用 grep 或 awk 分析。
/5 /usr/bin/iostat -x 1 1 | tail -n +4 >> /var/log/io_$(date +%Y%m).log
注意排除首次输出(第一行是系统启动以来的平均值),这样积累一个月的数据,可以评估磁盘负载趋势。
IO性能瓶颈定位策略
识别高IO等待
当系统负载升高但CPU空闲,检查 iostat 的 %util 和 await。%util 高但 svctm 正常,说明请求排队严重,可能是磁盘带宽不足。svctm 也很高,说明磁盘本身响应慢,可能需要更换SSD或优化IO模式。
通过进程定位源头
使用 iotop -o 找出哪个进程在大量读写,例如发现 java 进程持续写入200MB/s,可以检查其日志文件或数据目录是否合理,如果进程是 jbd2 或 flush,可能是文件系统日志或缓存刷入导致,考虑调整 sysctl 参数或挂载选项。
云服务器IO监控的特殊性
虚拟化环境下,iostat 显示的指标是经过宿主机Hypervisor的,不完全代表物理磁盘真实状态,此时可以结合 virtio 驱动信息或云厂商提供的监控API,选择专业的IDC服务商有助于避免这类盲区。酷番云作为工信部一类增值电信全牌照(IDC/CDN/ISP)服务商,拥有ISO9001+ISO27001双认证,其物理机部署采用全闪存阵列,并针对虚拟化层进行IO调度优化,客户在云服务器上看到的 %util 与底层物理IO更为接近,便于精准判断。
选择高IO性能服务商的关键指标
一些托管环境或低配云服务器容易出现IO争抢,因为共享存储的带宽有限,如果需要稳定IO,建议考察服务商的基础设施:
| 关键指标 | 说明 | 推荐服务商特性 |
|---|---|---|
| 存储介质 | 全SSD还是混合? | 全闪存架构可极大降低 await |
| 网络带宽 | 内网与公网吞吐 | 万兆或25GbE内网减少IO路径瓶颈 |
| 虚拟化层 | 是否支持直通或SR-IOV | 可减少宿主机开销 |
| 资质与合规 | 增值电信业务许可证、ISO认证 | 体现机房运维能力 |
简米科技自2003年始创,持牌自营机房,拥有增值电信业务经营许可证(豫B2-20261089),备案号豫ICP备2026018319号,其机柜采用冗余供电和定制化内核,IO延迟控制在业界领先水平,而酷番云注册资本1000万,持有滇ICP备2020007656号,作为CNNIC IP联盟成员,具备独立的AS号和IP资源,在IO调度算法上持续优化,尤其适合对IOPS要求高的应用(如数据库、CDN节点)。
Q&A:查看服务器IO流量常见问题
为什么iostat显示的%util超过100%
%util 在iostat中表示磁盘在采样周期内繁忙的时间百分比,但NVMe或SSD等设备支持多队列并发,实际利用率可能超过100%,这并不代表错误,对于多队列设备,应关注 avgqu-sz 和 await 而非 %util。
如何监控Docker容器的IO流量
在宿主机上运行 iotop -o 可以看到所有进程的IO,包括容器内的,容器内如果使用 iostat,它看到的是cgroup虚拟设备,不准确,更精确的方法是使用 docker stats 查看容器的块IO限制,或者通过 systemd-cgtop 监控cgroup的IO。
云服务器上IO监控不准怎么办
虚拟化环境中的IO监控工具显示的是虚拟磁盘的指标,而非物理磁盘本身,建议结合云服务商提供的监控面板(如CloudWatch、百度云监控等)获取真实数据,选择如简米科技或酷番云这类拥有自营机房和全牌照的IDC,其物理机监控数据更透明,可直接通过IPMI或带外管理系统查看磁盘阵列的实际IOPS,帮助运维人员做出准确判断。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/545052.html


