Iostat 磁盘性能监控教程
Iostat 是 sysstat 工具包中专门用于监控磁盘 I/O 性能的命令行工具。它能够报告每个磁盘设备的读写速度、IOPS、I/O 等待时间和利用率等关键指标。在搬瓦工 VPS 上,当网站响应变慢或数据库查询超时时,iostat 是诊断磁盘瓶颈的首选工具。
一、安装
# Ubuntu / Debian
apt update
apt install sysstat -y
# CentOS / RHEL
yum install sysstat -y
# 验证安装
iostat --version
二、基本用法
# 显示 CPU 和磁盘 I/O 概览
iostat
# 每 2 秒刷新,共 10 次
iostat 2 10
# 只显示磁盘统计
iostat -d
# 只显示 CPU 统计
iostat -c
# 以 MB 为单位显示
iostat -m
# 以人类可读格式显示
iostat -h
三、扩展统计(-x 选项)
扩展统计提供了更详细的 I/O 性能指标:
# 显示扩展磁盘统计
iostat -x 2 5
# 以 MB 为单位的扩展统计
iostat -xm 2 5
# 监控指定设备
iostat -xm -p sda 2 5
# 排除第一次输出(累计值)
iostat -xm 2 5 | awk 'NR>3'
关键指标解读
- r/s, w/s:每秒读/写请求次数(IOPS)。
- rMB/s, wMB/s:每秒读/写的 MB 数(吞吐量)。
- rrqm/s, wrqm/s:每秒合并的读/写请求数。
- await:I/O 请求的平均等待时间(毫秒),包含队列等待和服务时间。
- r_await, w_await:读/写请求的平均等待时间。
- svctm:I/O 请求的平均服务时间(已废弃,参考价值有限)。
- %util:设备利用率,接近 100% 表示磁盘已饱和。
四、性能瓶颈判断
4.1 磁盘饱和
# 持续监控磁盘利用率
iostat -xm 1 | awk '/^vda|^sda/ {print strftime("%H:%M:%S"), $0}'
# 判断标准:
# %util > 80%:磁盘压力大
# %util > 95%:磁盘已饱和
# await > 10ms:I/O 延迟较高
# await > 50ms:I/O 延迟严重
4.2 读写分析
# 查看读写分布
iostat -xm 2 | awk '/^vda/ {
total = $4 + $5;
if (total > 0) {
read_pct = $4 / total * 100;
write_pct = $5 / total * 100;
printf "读: %.1f%% (%.2f MB/s) | 写: %.1f%% (%.2f MB/s) | await: %.1f ms | util: %.1f%%\n",
read_pct, $4, write_pct, $5, $10, $NF
}
}'
4.3 I/O 等待分析
# CPU iowait 结合磁盘 await
iostat -xc 2 | awk '
/avg-cpu/ {getline; iowait=$4}
/^vda|^sda/ {printf "CPU iowait: %.1f%% | 磁盘 await: %.1f ms | util: %.1f%%\n", iowait, $10, $NF}
'
五、实用监控脚本
5.1 磁盘性能告警
#!/bin/bash
# 磁盘 I/O 告警脚本
THRESHOLD_UTIL=90
THRESHOLD_AWAIT=50
LOG="/var/log/disk-alert.log"
while true; do
iostat -xm 1 1 | awk -v threshold_util="$THRESHOLD_UTIL" \
-v threshold_await="$THRESHOLD_AWAIT" \
-v log="$LOG" '
/^vda|^sda/ {
util = $NF;
await = $10;
if (util > threshold_util || await > threshold_await) {
cmd = "date +\"%Y-%m-%d %H:%M:%S\"";
cmd | getline timestamp;
close(cmd);
printf "[%s] 警告: %s util=%.1f%% await=%.1fms\n", timestamp, $1, util, await >> log
}
}'
sleep 10
done
5.2 I/O 性能基准测试
# 使用 dd 测试顺序写入性能
dd if=/dev/zero of=/tmp/test_write bs=1M count=1024 conv=fdatasync 2>&1 | tail -1
# 使用 dd 测试顺序读取性能
dd if=/tmp/test_write of=/dev/null bs=1M count=1024 2>&1 | tail -1
# 清除缓存后测试真实读取性能
sync; echo 3 > /proc/sys/vm/drop_caches
dd if=/tmp/test_write of=/dev/null bs=1M count=1024 2>&1 | tail -1
# 清理测试文件
rm -f /tmp/test_write
六、与其他工具配合
# 结合 iotop 查看哪个进程占用 I/O
apt install iotop -y
iotop -oP
# 结合 lsof 查看进程打开的文件
lsof +D /var/log/
# 使用 pidstat 查看进程级 I/O
pidstat -d 2 5
# 使用 blktrace 深度分析(高级)
blktrace -d /dev/vda -o trace
blkparse -i trace
七、常见问题优化
# 调整磁盘调度器
cat /sys/block/vda/queue/scheduler
# 对于 SSD,noop 或 deadline 更合适
echo "noop" > /sys/block/vda/queue/scheduler
# 调整预读缓存
blockdev --getra /dev/vda
blockdev --setra 4096 /dev/vda
# 调整文件系统挂载参数(提升写入性能)
# 在 /etc/fstab 中添加 noatime 选项
# /dev/vda1 / ext4 defaults,noatime 0 1
总结
Iostat 是诊断磁盘性能瓶颈的必备工具。在搬瓦工 VPS 上,当发现系统响应变慢时,首先通过 iostat 检查 %util 和 await 指标即可快速判断是否为磁盘瓶颈。建议搭配 SAR 系统活动报告 和 Vmstat 内存监控 一起使用,全面分析系统性能。选购搬瓦工 VPS 请参考全部方案,使用优惠码 NODESEEK2026 可享受 6.77% 循环折扣。