iotop 是一个类似于 top 的命令行工具,它的主要作用是实时监控 Linux 系统中进程的磁盘 I/O 活动情况,通过 iotop,你可以清晰地看到哪个进程正在读写磁盘,以及它们占用了多少 I/O 带宽,这对于排查系统性能瓶颈(尤其是磁盘瓶颈)非常有用。

iotop 是什么?
iotop 的名字来源于 I/O + top,它通过读取内核的 I/O 计数器信息来工作,这些信息通常位于 /proc 文件系统中。
核心功能:
- 实时显示每个进程的磁盘读写速度。
- 显示总的磁盘读写速度。
- 显示等待 I/O 的进程数量和百分比。
如何安装 iotop?
iotop 通常不是 Linux 系统的默认组件,你需要手动安装,在不同的发行版中,安装命令也不同:
对于 Debian / Ubuntu / Mint 系统:

sudo apt update sudo apt install iotop
对于 CentOS / RHEL / Fedora / Rocky Linux / AlmaLinux 系统:
# 对于 CentOS/RHEL 7/8 及更新版本 sudo yum install iotop # 或者 sudo dnf install iotop # 对于 CentOS/RHEL 6 及更早版本 sudo yum install iotop
对于 Arch Linux 系统:
sudo pacman -S iotop
iotop 的基本用法
最简单的用法就是直接在终端输入 iotop:
sudo iotop
注意: iotop 需要 root 权限才能获取所有进程的 I/O 信息,因此必须使用 sudo 运行。

基本界面解读
运行 iotop 后,你会看到一个类似下面的界面:
Total DISK READ: 0.00 K/s | Total DISK WRITE: 0.00 K/s
Actual DISK READ: 0.00 K/s | Actual DISK WRITE: 0.00 K/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
1 be/4 root 0.00 K/s 0.00 K/s 0.00 % 0.00 % systemd
2 be/4 root 0.00 K/s 0.00 K/s 0.00 % 0.00 % kthreadd
3 rt/4 root 0.00 K/s 0.00 K/s 0.00 % 0.00 % rcu_gp
4 rt/4 root 0.00 K/s 0.00 K/s 0.00 % 0.00 % rcu_par_gp
5 be/4 root 0.00 K/s 0.00 K/s 0.00 % 0.00 % slub_flushwq
6 be/4 root 0.00 K/s 0.00 K/s 0.00 % 0.00 % netns
7 be/4 root 0.00 K/s 0.00 K/s 0.00 % 0.00 % rcu_tasks_kthre
8 be/4 root 0.00 K/s 0.00 K/s 0.00 % 0.00 % rcu_tasks_rude_
9 be/4 root 0.00 K/s 0.00 K/s 0.00 % 0.00 % rcu_tasks_trace
10 be/4 root 0.00 K/s 0.00 K/s 0.00 % 0.00 % kworker/0:0H-events
11 rt/4 root 0.00 K/s 0.00 K/s 0.00 % 0.00 % migration/0
12 be/4 root 0.00 K/s 0.00 K/s 0.00 % 0.00 % ksoftirqd/0
13 rt/4 root 0.00 K/s 0.00 K/s 0.00 % 0.00 % rcuop/0
14 be/4 root 0.00 K/s 0.00 K/s 0.00 % 0.00 % watchdog/0
15 be/4 root 0.00 K/s 0.00 K/s 0.00 % 0.00 % watchdog/0
16 be/4 root 0.00 K/s 0.00 K/s 0.00 % 0.00 % migration/0
17 be/4 root 0.00 K/s 0.00 K/s 0.00 % 0.00 % kdevtmpfs
18 be/4 root 0.00 K/s 0.00 K/s 0.00 % 0.00 % netns
19 be/4 root 0.00 K/s 0.00 K/s 0.00 % 0.00 % kworker/0:1-events
...
1234 be/4 myuser 50.00 M/s 0.00 K/s 0.00 % 99.99 % my_disk_intensive_app
...
列说明:
- TID (Thread ID): 线程 ID,在大多数情况下,它与进程 ID 相同。
- PRIO (Priority): 进程的优先级。
- USER: 运行该进程的用户。
- DISK READ: 进程从磁盘读取数据的速度。
- DISK WRITE: 进程向磁盘写入数据的速度。
- SWAPIN: 进程换入交换分区的百分比。
- IO%: 这是最重要的列之一,表示该进程等待 I/O 操作(包括读写)所花费的时间占总 CPU 时间的百分比,如果一个进程的
IO%很高,说明它正在“饥饿”地等待磁盘。 - COMMAND: 进程的名称或命令。 信息说明:**
- Total DISK READ/WRITE: 所有进程 I/O 的总和。
- Actual DISK READ/WRITE: 磁盘实际的 I/O 速度,这个值通常小于
Total,因为多个进程的 I/O 可能被合并或缓存。
常用选项和交互式命令
iotop 支持很多有用的选项,并且在运行时可以通过按键进行交互。
常用启动选项
| 选项 | 说明 |
|---|---|
-o, --only |
只显示有 I/O 活动的进程,这对于快速找到问题进程非常有用,默认会显示所有进程。 |
-b, --batch |
批处理模式,将输出重定向到文件或管道中,不使用交互式界面,适合用于脚本。 |
-n, --num |
指定在批处理模式下显示的迭代次数。iotop -b -n 10 会显示 10 次快照后退出。 |
-d, --delay |
指定刷新间隔,单位是秒。iotop -d 5 表示每 5 秒刷新一次。 |
-p, --pid |
只监控指定 PID 的进程。iotop -p 1234。 |
-u, --user |
只监控指定用户的进程。iotop -u myuser。 |
-a, --accumulated |
显示累计的 I/O 数量,而不是速率。 |
-k, --kilobytes |
使用 KB/s 作为单位,而不是默认的 MB/s。 |
示例:
- 只显示有 I/O 活动的进程:
sudo iotop -o
- 将 I/O 活动记录到文件中,每秒刷新一次,共记录 60 次:
sudo iotop -b -d 1 -n 60 > iotop.log
交互式命令
当 iotop 在交互式模式下运行时,你可以按以下键来控制它:
| 按键 | 功能 |
|---|---|
left / right / up / down |
上下左右箭头键,用于在列表中排序。 |
a |
切换 --accumulated 模式(累计 I/O / 速率 I/O)。 |
d |
切换 --delay 时间间隔。 |
p |
切换 --pid 过滤器(会提示你输入 PID)。 |
q |
退出 iotop。 |
r |
切换 --raw 模式(显示原始数据)。 |
s |
切换 --since 过滤器(显示自某个时间以来的 I/O)。 |
t |
切换 --total 模式(显示/隐藏顶部摘要行)。 |
u |
切换 --user 过滤器(会提示你输入用户名)。 |
实际应用场景
系统响应缓慢,怀疑是磁盘瓶颈
当你的 Linux 服务器突然变慢,鼠标卡顿,网页打不开时,可以运行 sudo iotop -o。
- 观察现象: 如果看到某个进程(
mysqld,java,nginx)的DISK READ或DISK WRITE列的值非常高,IO%列也持续处于高位(比如超过 50%),那么这个进程很可能就是导致系统缓慢的元凶。 - 解决方案:
- 确认该进程是否正常工作。
- 如果是数据库,可能需要优化 SQL 查询或增加缓存。
- 如果是应用,可能需要检查其日志写入或文件操作逻辑。
- 考虑升级硬件,例如使用更快的 SSD 替换 HDD。
监控备份或数据同步任务
当你运行 rsync, tar, dd 等命令进行大文件复制或备份时,你想知道它占用了多少 I/O 带宽。
- 操作: 在另一个终端窗口运行
sudo iotop -p <PID>,将<PID>替换为备份进程的 PID。 - 观察现象: 你可以实时看到该进程的读写速度,从而判断备份进度是否正常,以及是否对线上服务造成了 I/O 压力。
分析日志文件
将 iotop 的输出保存到文件中,以便后续分析。
- 操作:
sudo iotop -b -n 60 -d 1 > /var/log/iotop_$(date +%Y%m%d_%H%M%S).log
- 用途: 在系统出现性能问题的特定时间段内运行此命令,可以记录下当时的 I/O 情况,方便事后排查问题根源。
替代工具
虽然 iotop 非常直观,但还有一些其他工具可以实现类似的功能:
iostat(sysstat 包): 更侧重于设备和系统整体的 I/O 统计,而不是单个进程,它可以显示磁盘的利用率、读写请求队列长度等,是分析磁盘性能的利器。pidstat(sysstat 包): 可以监控单个进程或所有进程的 CPU、内存、I/O 等情况,使用pidstat -d -p <PID>可以查看特定进程的 I/O 统计。dstat: 一个非常强大的多功能系统统计工具,可以同时显示 CPU、内存、网络、磁盘 I/O 等信息,并可以灵活定制。
iotop 是 Linux 系统管理员和开发者排查进程级磁盘 I/O 问题的首选工具之一,它直观、易用,能快速定位到是哪个进程在“疯狂”地读写磁盘,结合 iostat 和 pidstat 等工具,你可以构建一个强大的 I/O 性能监控和分析工具集。
