怎么查看是哪个进程在疯狂读写硬盘?

在 Linux 终端里找出持续占用磁盘 I/O 的进程,确认它是长期占用而不是偶尔突发,再用 iostat 验证磁盘已经安静下来。

Linux进程iotop 磁盘 IO 监控监控性能磁盘pidstat 进程监控中风险
运行 sudo iotop -o -a:-o 参数只显示正在进行 I/O 的进程,一眼就能看到此刻谁在读写磁盘,以及它的 PID。

快速开始

硬盘灯一直闪、CPU 明明很闲却很卡、load average 居高不下,多半是某个进程把磁盘占满了。下面这几步教你在终端里锁定这个进程、确认它确实是元凶,并在处理完之后检查磁盘是否已经恢复正常。

症状

?硬盘指示灯长亮不灭,打开文件或执行一个简单的 ls 都要等好几秒,top 里用户态 CPU 不高但 wa(I/O 等待)很高,dmesg 或 journal 里还能看到进程卡在 I/O 上的记录。

先找出此刻正在读写的进程

iotop 相当于磁盘 I/O 版的 top:它按进程列出读写吞吐,加上 -o 就只显示真正有 I/O 的进程,不用在一屏空闲进程里翻找。记下第一行第一列的 PID,以及这个进程到底是什么——数据库、备份、同步客户端还是某个异常服务。-a 会把瞬时速率换成累计总量,对那种一阵一阵爆发的进程更好判断。如果列表始终是空的,说明压力来自内核回写或缓存刷盘,而不是普通用户进程。

实时找出是哪个进程在大量读写硬盘,定位系统变慢的原因。

命令
$ sudo iotop -o -a

确认这个进程是持续占用,而不是偶尔冒一下

pidstat 加 -d 会按进程输出 I/O 数据,再带上 -u -r 就能同时看到 CPU 和内存,方便判断它到底是不是卡在磁盘上。把命令里的 1234 换成你在上一步 iotop 第一列记下的 PID,末尾两个数字分别是采样间隔(秒)和采样次数。如果每次采样的 kB_rd/s、kB_wr/s 都很高,那就是它了;如果几乎为零,就回到 iotop 列表里看下一个进程。

pidstat 可按时间序列输出某个 PID(或全部任务)的 CPU、内存和 I/O 统计,适合长时间记录进程行为。

命令
$ pidstat -u -r -d -p 1234 2 5

确认磁盘已经安静下来

停掉、重启或调整完那个进程之后,再跑一次 iostat -x,盯着刚才繁忙的那块设备的 %util 和 await。%util 应该降到个位数,读写队列也应该清空。如果还是顶在 100% 附近,说明还有别的东西在压这块盘——可能是另一个进程、RAID 重建,或者磁盘本身快坏了,那就回到 iotop 再排查一轮。

Linux用 iostat -x 分析磁盘 I/O低风险步骤 3

iostat -x 按设备输出扩展统计——r/s、w/s、await 和 %util——并按间隔刷新,方便观察饱和度。

命令
$ iostat -x 2 5
!iotop 需要 root 才能看到其他用户的进程,用包管理器安装即可。不要上来就 kill 进程——数据库、备份任务、容器运行时、日志采集器大量读写磁盘往往是在正常工作;先确认这个进程是干什么的,再考虑用 systemctl 停止或应用自身的限速选项,而不是直接 kill -9。

如何确认已解决

停掉、重启或调整完那个进程之后,iostat -x 里的 %util 应该回落到个位数,await 也接近该设备平时的水平;再跑一次 iotop -o 时,应该只剩偶尔的短时突发。

来源

  • iotop(8) — Debian manpage
    Debian · community · 2026-09-17
    依据: Debian manpage for iotop documents -o (only show processes actually doing I/O) and -a (accumulated I/O) options
  • iotop(8) — Arch Linux manual
    Arch Linux · community · 2026-09-17
    依据: Arch manual describes iotop's --only (-o) option to show only processes or threads actually doing I/O
  • pidstat(1) - Report statistics for Linux tasks
    Ubuntu Manpages · technical · 2026-09-17
    依据: pidstat reports statistics for Linux tasks (processes): -u CPU usage, -r memory, -d I/O, -p selects a task, with interval and count arguments.
  • iostat(1) - Report CPU statistics and I/O statistics for devices
    Ubuntu Manpages · technical · 2026-09-17
    依据: -x shows extended statistics; interval and count parameters report repeatedly; %util is the percentage of elapsed time during which the device was busy.

最后验证: 2026-09-22

相关指南