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% 循环折扣。

关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工的方案、优惠和教程。我们不销售主机,不提供技术服务。

新手必读
搬瓦工优惠码

NODESEEK2026(优惠 6.77%)

购买时填入即可抵扣。