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

相关推荐
欧云服务器4 天前
怎么让脚本命令可以同时在centos、debian、ubuntu执行?
ubuntu·centos·debian
智渊AI4 天前
Ubuntu 20.04/22.04 下通过 NVM 安装 Node.js 22(LTS 稳定版)
ubuntu·node.js·vim
The️4 天前
Linux驱动开发之Read_Write函数
linux·运维·服务器·驱动开发·ubuntu·交互
再战300年4 天前
Samba在ubuntu上安装部署
linux·运维·ubuntu
qwfys2004 天前
How to install golang 1.26.0 to Ubuntu 24.04
ubuntu·golang·install
木尧大兄弟4 天前
Ubuntu 系统安装 OpenClaw 并接入飞书记录
linux·ubuntu·飞书·openclaw
小虾爬滑丫爬4 天前
ubuntu上设置Tomcat 开机启动
ubuntu·tomcat·开机启动
老师用之于民4 天前
【DAY25】线程与进程通信:共享内存、同步机制及实现方案
linux·c语言·ubuntu·visual studio code
小虾爬滑丫爬4 天前
Ubuntu 上设置防火墙
ubuntu·防火墙
林开落L5 天前
解决云服务器内存不足:2 分钟搞定 Ubuntu swap 交换区配置(新手友好版)
运维·服务器·ubuntu·swap交换区