Ubuntu 磁盘 I/O 监控完全指南
在 Ubuntu 中监控磁盘 I/O 性能有多种工具和方法,下面是最全面的解决方案:
🔧 1. 使用 iostat(实时监控)
安装 sysstat 包
bash
sudo apt update
sudo apt install sysstat
基本用法
bash
# 显示所有磁盘的 I/O 统计
iostat -dx 1
# 每2秒刷新,显示5次
iostat -dx 2 5
输出解释
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.00 16.00 0.00 0.00 0.00 0.00 0.25 0.00 0.25 0.25 0.40
vdb 0.00 17.00 79.00 101.00 14416.00 3908.00 203.60 10.98 66.12 73.04 60.70 5.52 99.30
dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-2 0.00 0.00 79.00 108.00 14416.00 3716.00 193.93 11.39 65.81 73.04 60.52 5.31 99.30
- %util:磁盘利用率(接近100%表示饱和)
- await:平均 I/O 响应时间(ms)
- rkB/s, wkB/s:读写速度(KB/s)
- avgqu-sz:平均队列长度
1. vdb 设备分析(主要问题设备)
关键问题点:
- %util = 99.30%:磁盘利用率接近100%,表明磁盘已完全饱和
- avgqu-sz = 10.98:平均队列长度超过10,表示大量 I/O 请求在排队
- await = 66.12ms:平均 I/O 响应时间过高(理想值应 < 10ms)
- r_await = 73.04ms:读操作延迟特别高
- svctm = 5.52ms:实际服务时间较长(SSD 应 < 1ms,HDD < 10ms)
dm-2 设备分析(LVM/设备映射层)
与 vdb 几乎相同的指标,表明 dm-2 是 vdb 的映射设备
同样显示 99.3% 的利用率和高延迟
🔍 问题诊断
- 磁盘饱和:vdb 和 dm-2 的 %util 持续在 99.3%,表明磁盘已成为系统瓶颈
- 读操作问题:读延迟 (73ms) 显著高于写延迟 (60ms),读操作是主要瓶颈
- 高队列深度:平均队列长度 >10,表明 I/O 请求积压严重
- 可能的硬件问题:
如果是 SSD:svctm 5.52ms 过高,可能磁盘磨损或配置问题
如果是 HDD:属于正常范围,但性能不足
🚀 优化建议
bash
# 检查磁盘类型
sudo hdparm -I /dev/vdb | grep "Model"
# 如果是HDD:
sudo apt install ioping
sudo ioping -c 10 /dev/vdb # 测试延迟
# 建议方案:
# - 升级为SSD(NVMe最佳)
# - 增加磁盘数量,使用RAID 0/10
# - 添加更多内存作为缓存
📊 2. 使用 iotop(进程级监控)
安装
bash
sudo apt install iotop
使用
bash
# 实时监控进程 I/O
sudo iotop
# 只显示有 I/O 的进程
sudo iotop -o
# 按 I/O 排序
sudo iotop -o -P
输出示例
Total DISK READ: 0.00 B/s | Total DISK WRITE: 0.00 B/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
1234 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kworker/u8:2]
📈 3. 使用 vmstat(系统级监控)
bash
# 每1秒刷新,显示10次
vmstat 1 10
# 带磁盘统计
vmstat -d 1
关键指标
- bi:块设备接收的块数(读)
- bo:块设备发送的块数(写)
🛠 4. 使用 dstat(多功能监控)
安装
bash
sudo apt install dstat
使用
bash
# 综合监控(CPU、磁盘、网络等)
dstat -cdlmnpsy
# 只监控磁盘
dstat -d
# 按进程监控
dstat --top-bio
📋 5. 查看 /proc 文件系统
实时 I/O 统计
bash
cat /proc/diskstats
每个设备的详细统计
bash
cat /sys/block/sda/stat
📉 6. 使用 sar(历史数据分析)
配置数据收集
bash
sudo nano /etc/default/sysstat
# 修改 ENABLED="true"
sudo systemctl enable sysstat
sudo systemctl start sysstat
查看历史数据
bash
# 查看今天的磁盘报告
sar -d
# 查看特定日期(2025年10月10日)
sar -d -f /var/log/sysstat/sa10
📊 7. 图形化工具
1. GNOME 系统监视器
bash
gnome-system-monitor
- 在"资源"选项卡查看磁盘活动
2. KSysGuard (KDE)
bash
ksysguard
3. Netdata(实时仪表盘)
bash
# 安装
bash <(curl -Ss https://my-netdata.io/kickstart.sh)
# 访问
http://localhost:19999
🔍 8. 高级诊断工具
1. blktrace(块级跟踪)
bash
sudo apt install blktrace
sudo blktrace -d /dev/sda -o - | blkparse -i -
2. ioping(延迟测试)
bash
sudo apt install ioping
sudo ioping -c 10 /dev/sda
3. fio(压力测试)
bash
sudo apt install fio
fio --name=test --ioengine=libaio --iodepth=16 --rw=randread --bs=4k --direct=1 --size=1G --numjobs=4
📌 常用命令速查表
命令 | 功能 | 示例 |
---|---|---|
iostat -dx 1 |
实时磁盘统计 | iostat -dx 1 |
iotop -o |
实时进程 I/O | sudo iotop -o |
vmstat 1 |
系统资源概览 | vmstat 1 |
dstat -d |
磁盘活动监控 | dstat -d |
sar -d |
历史磁盘报告 | sar -d |
hdparm -tT |
磁盘速度测试 | sudo hdparm -tT /dev/sda |
💡 性能分析技巧
-
识别瓶颈:
- 如果 %util > 80%,磁盘是瓶颈
- 如果 await > 10ms,可能存在 I/O 延迟问题
-
优化建议:
bash# 使用 noatime 挂载选项 sudo nano /etc/fstab # 修改为: /dev/sda1 / ext4 defaults,noatime 0 1 # 调整 I/O 调度器 echo deadline | sudo tee /sys/block/sda/queue/scheduler # 增加预读 echo 1024 | sudo tee /sys/block/sda/queue/read_ahead_kb
-
监控脚本示例:
bash#!/bin/bash # 监控磁盘 I/O 并记录到文件 while true; do echo "===== $(date) =====" >> disk_io.log iostat -dx 1 1 >> disk_io.log iotop -botqq -n 1 >> disk_io.log sleep 5 done
📊 性能指标解读指南
指标 | 正常范围 | 警告阈值 | 危险阈值 | 含义 |
---|---|---|---|---|
%util | < 60% | 60-80% | > 80% | 磁盘利用率 |
await | < 10ms | 10-20ms | > 20ms | 平均 I/O 响应时间 |
avgqu-sz | < 1 | 1-2 | > 2 | 平均队列长度 |
rkB/s + wkB/s | - | - | - | 总吞吐量 |
svctm | < 5ms | 5-10ms | > 10ms | 平均服务时间 |
📝 总结
- 实时监控 :使用
iostat
和iotop
- 历史分析 :使用
sar
查看历史数据 - 进程级诊断 :
iotop
或dstat --top-bio
- 深度分析 :使用
blktrace
进行块级跟踪 - 图形界面:GNOME 系统监视器或 Netdata
通过这些工具的组合使用,您可以全面了解 Ubuntu 系统的磁盘 I/O 性能,及时发现并解决性能瓶颈问题。