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

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

在 Ubuntu 中监控磁盘 I/O 性能有多种工具和方法,下面是最全面的解决方案:

🔧 1. 使用 iostat(实时监控)

安装 sysstat 包

sudo apt update
sudo apt install sysstat

基本用法

# 显示所有磁盘的 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:属于正常范围,但性能不足
🚀 优化建议
# 检查磁盘类型
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(进程级监控)

安装

sudo apt install iotop

使用

# 实时监控进程 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(系统级监控)

# 每1秒刷新,显示10次
vmstat 1 10

# 带磁盘统计
vmstat -d 1

关键指标

  • bi:块设备接收的块数(读)
  • bo:块设备发送的块数(写)

🛠 4. 使用 dstat(多功能监控)

安装

sudo apt install dstat

使用

# 综合监控(CPU、磁盘、网络等)
dstat -cdlmnpsy

# 只监控磁盘
dstat -d

# 按进程监控
dstat --top-bio

📋 5. 查看 /proc 文件系统

实时 I/O 统计

cat /proc/diskstats

每个设备的详细统计

cat /sys/block/sda/stat

📉 6. 使用 sar(历史数据分析)

配置数据收集

sudo nano /etc/default/sysstat
# 修改 ENABLED="true"
sudo systemctl enable sysstat
sudo systemctl start sysstat

查看历史数据

# 查看今天的磁盘报告
sar -d

# 查看特定日期(2025年10月10日)
sar -d -f /var/log/sysstat/sa10

📊 7. 图形化工具

1. GNOME 系统监视器

gnome-system-monitor
  • 在"资源"选项卡查看磁盘活动

2. KSysGuard (KDE)

ksysguard

3. Netdata(实时仪表盘)

# 安装
bash <(curl -Ss https://my-netdata.io/kickstart.sh)

# 访问
http://localhost:19999

🔍 8. 高级诊断工具

1. blktrace(块级跟踪)

sudo apt install blktrace
sudo blktrace -d /dev/sda -o - | blkparse -i -

2. ioping(延迟测试)

sudo apt install ioping
sudo ioping -c 10 /dev/sda

3. fio(压力测试)

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/Osudo 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. 优化建议

    # 使用 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. 监控脚本示例

    #!/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< 10ms10-20ms> 20ms平均 I/O 响应时间
avgqu-sz< 11-2> 2平均队列长度
rkB/s + wkB/s---总吞吐量
svctm< 5ms5-10ms> 10ms平均服务时间

📝 总结

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冲上云霄的Jayden

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值