在 Linux 中如何使用 iotop 监控磁盘 I/O?

问题浏览数Icon
26
问题创建时间Icon
2025-04-21 01:59:00
作者头像
tianmu77

在Linux中,使用sudo iotop命令即可实时监控各进程的磁盘I/O使用情况,需以root权限运行。通过进程列表可查看读写速度和累计数据,按方向键可排序。

更多回答

作者头像
steelray99

在Linux中使用iotop监控磁盘I/O,需先安装iotop包(如sudo apt install iotop),然后以root权限运行sudo iotop,实时查看各进程的I/O读写速度和累计量。

延伸知识点:iotop与iostat的区别 iostat(来自sysstat包)侧重于磁盘设备级别的统计,如整体读写速度、I/O队列长度,通过iostat -x 1可查看设备负载(如%util表示设备繁忙度)。而iotop基于进程展示实时I/O,依赖内核I/O记账功能(需启用CONFIG_TASKSTATSCONFIG_VM_EVENT_COUNTERS)。两者结合可定位高I/O进程(iotop)及确认是否达到磁盘瓶颈(iostat的%util接近100%)。

作者头像
echozone88

在Linux中使用iotop监控磁盘I/O的实践可分为以下层面:

  1. 安装与权限
    需通过yum install iotopapt-get install iotop安装,执行时需root权限或sudo提权。实践中常遇到环境未预装iotop导致脚本报错,需在自动化部署中显式声明依赖。

  2. 核心参数运用

    • -o仅显示活跃I/O进程,避免信息过载
    • -P过滤线程级统计,精准定位问题进程
    • -u username按用户维度排查,在多租户虚拟化环境中尤其关键
    • --batch模式配合重定向实现后台监控,曾用于KVM热迁移时记录I/O峰值
  3. 实战排查案例
    某次MySQL集群性能下降场景中,通过iotop -oPa发现flush线程持续占满SSD顺序写带宽,最终定位到innodb_io_capacity参数配置低于物理盘实际iops。另一次Ceph对象存储异常时,结合pidstat -d与iotop联动分析,识别出radosgw进程因小文件聚合写入产生随机I/O风暴。

  4. 内核级挑战

    • 低版本内核(如2.6.20之前)缺乏I/O记账功能,导致iotop数据缺失
    • LVM/dm设备映射场景中,iotop默认显示物理设备名,需通过lsblk -f二次映射逻辑卷
    • cgroup v2环境下进程I/O统计存在归组偏差,需额外启用io.stat控制器
  5. 可视化增强
    通过--accumulated参数统计历史I/O总量时,发现进程短期爆发式I/O易被均值掩盖。对此开发了自定义脚本,将iotop输出与blktrace原始事件关联,构建时间序列热力图。在超融合架构中,该方案成功识别出某虚拟机因TRIM指令触发SSD控制器级阻塞。

注:生产环境中建议同时监控/proc/diskstats原始数据,避免因iotop采样间隔(默认1s)错过纳秒级I/O竞争场景。

作者头像
hongyan77

是否考虑过尝试使用 iostat 来获取更详细的磁盘 I/O 统计信息,尤其是在系统级性能分析中可能更为直观?

作者头像
rainstorm99

用iotop监控磁盘I/O很简单!先装iotop:Ubuntu用sudo apt install iotop,CentOS用sudo yum install iotop。装完直接sudo iotop就能看实时读写情况,按左右箭头可以排序,按Q退出。想看正在活动的进程就加-o参数,比如sudo iotop -o,这样只显示有读写操作的进程,超方便!

作者头像
milkdrizzle
  1. 安装iotop

    • Debian/Ubuntu:apt-get install iptop
    • RHEL/CentOS:yum install iptopdnf install iptop
  2. 以root权限运行

    sudo iptop
  3. 基础监控

    • 默认界面显示所有进程的磁盘读写(IO)情况,包含IO百分比、进程ID、优先级等。
  4. 常用参数

    • 仅显示活跃IO进程:iptop -o
    • 按IO使用率排序:按左右箭头调整排序列
    • 批处理模式(输出到文件):iptop -b > iptop.log
  5. 监控特定进程: 结合grep过滤,例如:iptop | grep nginx

  6. 退出:按qCtrl+C终止监控。

注意事项

  • 需内核支持(多数现代系统默认启用)
  • 数据实时刷新,可通过-d指定刷新间隔(如-d 5为5秒)
  • 若进程显示为[kworker],表示内核线程的IO操作
作者头像
frostmoon88

在Linux中使用iotop监控磁盘I/O的步骤如下:

  1. 安装

    • Debian/Ubuntu:sudo apt-get install iotop
    • CentOS/RHEL:sudo yum install iotopsudo dnf install iotop
  2. 基础使用

    • 直接运行 sudo iotop(需root权限)
    • 界面关键列说明:
      • DISK READ/DISK WRITE:进程实时读写速度
      • SWAPIN:进程等待交换的CPU占比
      • IO>:I/O操作消耗的总CPU时间百分比
  3. 常用参数

    • -o/--only:仅显示活跃I/O的进程
    • -d 秒数:设置刷新间隔(如-d 2
    • -p PID:监控特定进程
    • -u 用户名:按用户筛选
    • -a:显示累积I/O量(历史统计)
    • -b:非交互式批量模式(用于脚本)
  4. 高级操作

    • 按左右箭头键切换排序列(默认按I/O负载排序)
    • 使用--batch --numeric生成纯文本输出(可重定向到文件)
    • 组合过滤:sudo iotop -ob -d 5(批量模式+2秒刷新)
  5. 故障排查

    • 若提示无权限:检查是否以root执行
    • 若数据不更新:确认内核配置是否启用CONFIG_TASK_IO_ACCOUNTING(可通过grep CONFIG_TASK_IO_ACCOUNTING /boot/config-$(uname -r)验证)
  6. 典型场景

    • 快速定位高I/O进程:sudo iotop -oPa
    • 持续监控并记录:sudo iotop -b -d 10 -n 3 > iotop.log
    • 分析特定进程:sudo iotop -p $(pidof mysqld)

注意:iotop依赖内核I/O统计功能,较旧内核可能需手动启用。对于容器环境(如Docker),需在宿主机执行才能监控容器进程的I/O。