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 性能,及时发现并解决性能瓶颈问题。