Ubuntu 磁盘 I/O 监控完全指南

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 设备分析(主要问题设备)

关键问题点:

  1. %util = 99.30%:磁盘利用率接近100%,表明磁盘已完全饱和
  2. avgqu-sz = 10.98:平均队列长度超过10,表示大量 I/O 请求在排队
  3. await = 66.12ms:平均 I/O 响应时间过高(理想值应 < 10ms)
  4. r_await = 73.04ms:读操作延迟特别高
  5. svctm = 5.52ms:实际服务时间较长(SSD 应 < 1ms,HDD < 10ms)
dm-2 设备分析(LVM/设备映射层)​

与 vdb 几乎相同的指标,表明 dm-2 是 vdb 的映射设备

同样显示 99.3% 的利用率和高延迟

🔍 问题诊断
  1. 磁盘饱和:vdb 和 dm-2 的 %util 持续在 99.3%,表明磁盘已成为系统瓶颈
  2. 读操作问题:读延迟 (73ms) 显著高于写延迟 (60ms),读操作是主要瓶颈
  3. 高队列深度:平均队列长度 >10,表明 I/O 请求积压严重
  4. 可能的硬件问题:
    如果是 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

💡 性能分析技巧

  1. 识别瓶颈

    • 如果 %util > 80%,磁盘是瓶颈
    • 如果 await > 10ms,可能存在 I/O 延迟问题
  2. 优化建议

    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
  3. 监控脚本示例

    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 平均服务时间

📝 总结

  1. 实时监控 :使用 iostatiotop
  2. 历史分析 :使用 sar 查看历史数据
  3. 进程级诊断iotopdstat --top-bio
  4. 深度分析 :使用 blktrace 进行块级跟踪
  5. 图形界面:GNOME 系统监视器或 Netdata

通过这些工具的组合使用,您可以全面了解 Ubuntu 系统的磁盘 I/O 性能,及时发现并解决性能瓶颈问题。

相关推荐
福如意如我心意8 小时前
ubuntu服务器重启,xinference自动加载模型脚本
服务器·ubuntu·ai
誰能久伴不乏12 小时前
如何在 Linux_Ubuntu 上安装 Qt 5:详细教程
linux·qt·ubuntu
dualven_in_csdn12 小时前
ubuntu离线安装 xl2tpd
linux·数据库·ubuntu
让子弹飞021 天前
永久解决ubuntu网络连接问题
linux·运维·ubuntu
月墨江山1 天前
Ubuntu 20.04 使用 Issac Gym 进行宇树G1人形机器人进行强化学习训练(Linux仿真)
linux·ubuntu·机器人
QMCY_jason1 天前
ubuntu 24.04 FFmpeg编译 带Nvidia 加速记录
linux·ubuntu·ffmpeg
Fcy6481 天前
初识Linux和Linux基础指令详细解析及shell的运行原理
linux·服务器·ubuntu·centos
~光~~1 天前
【环境配置 安装 】RK3588+Ubuntu20.04+cmake3.22+opencv4.54
opencv·ubuntu·rk3588
一只积极向上的小咸鱼2 天前
Windows中通过wsl运行Ubuntu
linux·运维·ubuntu