You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

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

嗨,我完全懂你说的iotop启动慢的痛点——磁盘被狂读写的时候,等它加载出来那几分钟真的急死人!不过不用愁,咱们有不少更直接的办法,不管是通过/proc文件系统用BASH脚本搞定,还是用其他轻量工具,都能快速拿到磁盘I/O的信息。

一、直接读取/proc文件系统(纯BASH方式)

Linux的/proc文件系统就是个活的系统状态数据库,磁盘I/O的核心数据都存在这里,不用等任何工具加载,直接读就行:

  • 查看全局磁盘I/O统计:/proc/diskstats记录了每个磁盘设备的详细I/O数据,包括读写次数、字节数、耗时等。你可以用cat /proc/diskstats直接看,也可以用awk过滤出你关心的设备,比如只看sda的关键指标:

    awk '/sda/ {print "设备: "$3", 读次数: "$4", 写次数: "$8", 读字节: "$6" B, 写字节: "$10" B"}' /proc/diskstats
    

    这里的字段对应关系可以自己调整,比如想加读写耗时的话,$7是读耗时,$11是写耗时,按需加就行。

  • 查看单个进程的I/O情况:每个进程的PID目录下都有个io文件,比如PID是1234,直接执行:

    cat /proc/1234/io
    

    里面的rchar是进程读取的总字节数,wchar是写入的总字节数,syscr和syscw分别是发起的读写系统调用次数,能精准定位单个进程的I/O行为。如果想批量找最耗I/O的进程,用个简单的BASH循环就行:

    for pid in $(ls /proc | grep '^[0-9]'); do
      if [ -f /proc/$pid/io ]; then
        read -r rchar wchar < <(awk '/rchar|wchar/ {print $2}' /proc/$pid/io)
        echo "PID $pid: 读总字节=$rchar, 写总字节=$wchar"
      fi
    done | sort -k 5 -nr | head -10
    

    这个脚本会按写总字节倒序排列,输出前10个最耗磁盘的进程,启动瞬间就能出结果。

二、用轻量工具替代iotop

如果你觉得手动写脚本麻烦,还有几个启动快、资源占用极低的工具,比iotop靠谱多了:

  • iostat:几乎所有Linux发行版都自带(属于sysstat包),能快速显示系统整体和单个磁盘的I/O速率、响应时间等。实时监控的话,每秒刷新一次:

    iostat -x 1
    

    -x参数会显示扩展统计,比如%util字段能告诉你磁盘的繁忙程度,接近100%的话说明磁盘已经满负荷了。

  • pidstat:同样是sysstat包里的工具,专门聚焦进程级别的I/O统计,启动速度飞快。每秒刷新一次所有进程的I/O数据:

    pidstat -d 1
    

    它会直接列出每个进程的PID、进程名、读写速率,一眼就能找到哪个进程在狂读写磁盘。

  • dstat:这个工具把磁盘、CPU、网络等统计整合在一起,输出更直观。如果没装的话,用包管理器装一下(比如apt install dstat),然后只看磁盘I/O:

    dstat -d
    

    它会实时显示总读写速率,以及每个磁盘的具体情况,界面友好还不卡。

备注:内容来源于stack exchange,提问作者swwwww

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 11:18:01