1. 写在前面
本文主要介绍 Linux iotop
或 Input/Output top
命令:用于显示和监控磁盘 IO 使用详情,甚至获取进程现有 IO 使用情况。它是用 python 设计的,需要内核模块才能执行。系统管理员可以用它来追踪可能导致磁盘 I/O 读写量过高的特定进程。
它需要一个 python 解释器来执行。其输出结果与 top
命令类似。通常需要 root 权限才能执行。
关注 公众号 获取最新博文: 滑翔的纸飞机
2. iotop 命令
2.1 安装
- CentOS/RHEL:
sudo yum install iotop
- ubuntu:
sudo apt install iotop
2.2 使用 iotop 命令
命令参数
-o:只显示有io操作的进程;
-b:批量显示,无交互,主要用作记录到文件;
-n NUM:显示NUM次,主要用于非交互式模式;
-d SEC:间隔SEC秒显示一次;
-p PID:监控的进程pid;
-u USER:监控的进程用户;
iotop 常用快捷键
左右箭头:改变排序方式,默认是按IO排序;
r:改变排序顺序;
o:只显示有IO输出的进程;
p:进程/线程的显示方式的切换;
a:显示累积使用量;
q:退出;
输出详解
整体 IO 输出解释:
Total DISK READ
Total DISK WRITE
表示了进程和内核线程之间的总的读写带宽,另一方面也表示内核块设备子系统的。Current DISK READ
Current DISK WRITE
表示在内核块设备子系统和下面硬件(HDD、SSD 等等)对应的实际磁盘 I/O 带宽。
进程 IO 输出解释:
TID 线程号或进程号
PRIO 线程运行时的I/O优先级
USER 进程所属用户
DISK READ 刷新时间间隔内读取数据量
DISK WRITE 刷新时间间隔内写入数据量
SWAPIN 每个进程的交换使用率
IO 每个进程的 I/O 利用率,包含磁盘和交换
COMMAND 进程名字
2.2.1 获取进程列表及其当前磁盘 IO 使用情况
root@dev:~# sudo iotop
----------------------------------------------------------------------------
Total DISK READ: 0.00 B/s | Total DISK WRITE: 3.40 K/s
Current DISK READ: 0.00 B/s | Current DISK WRITE: 13.61 K/sTID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND 296 be/3 root 0.00 B/s 0.00 B/s 0.00 % 0.05 % [jbd2/vda1-8]2836 be/4 systemd- 0.00 B/s 3.40 K/s 0.00 % 0.03 % beam.smp -W w -MBas ageffcbf -MHas ageffcbf -MBlmbcs 512 -MHlmbcs 512 -MMmcs 30 -P 1048~syslog_error_logger false -kernel prevent_overlapping_partitions false [3_dirty_io_sche]1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % init2 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kthreadd]3 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcu_gp]4 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcu_par_gp]6 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kworker/0:0H-kblockd]8 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [mm_percpu_wq]9 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ksoftirqd/0]10 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcu_sched]11 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [migration/
... ... keys: any: refresh q: quit i: ionice o: active p: procs a: accum sort: r: asc left: SWAPIN right: COMMAND home: TID end: COMMAND
该命令将显示进程列表及其当前磁盘使用情况,并不断更新。
2.2.2 仅显示有 IO 操作的进程
root@dev:~# sudo iotop -o
----------------------------------------------------------------------------
Total DISK READ: 0.00 B/s | Total DISK WRITE: 3.84 K/s
Current DISK READ: 0.00 B/s | Current DISK WRITE: 15.36 K/sTID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND 296 be/3 root 0.00 B/s 0.00 B/s 0.00 % 0.05 % [jbd2/vda1-8]2836 be/4 systemd- 0.00 B/s 3.84 K/s 0.00 % 0.03 % beam.smp -W w -MBas ageffcbf -MHas ageffcbf -MBlmbcs 512 -MHlmbcs 512 -MMmcs 30 -P 1048~syslog_error_logger false -kernel prevent_overlapping_partitions false [3_dirty_io_sche]keys: any: refresh q: quit i: ionice o: all p: procs a: accum sort: r: asc left: SWAPIN right: COMMAND home: TID end: COMMAND
这将显示当前正在执行 IO 的所有进程。
2.2.3 获取 iotop 的版本
root@dev:~# sudo iotop --version
----------------------------------------------------------------------------
iotop 0.6
显示当前安装的 iotop
工具版本。
2.2.4 显示帮助信息
root@dev:~# sudo iotop -h
----------------------------------------------------------------------------
Usage: /usr/sbin/iotop [OPTIONS]DISK READ and DISK WRITE are the block I/O bandwidth used during the sampling
period. SWAPIN and IO are the percentages of time the thread spent respectively
while swapping in and waiting on I/O more generally. PRIO is the I/O priority
at which the thread is running (set using the ionice command).Controls: left and right arrows to change the sorting column, r to invert the
sorting order, o to toggle the --only option, p to toggle the --processes
option, a to toggle the --accumulated option, i to change I/O priority, q to
quit, any other key to force a refresh.Options:--version show program's version number and exit-h, --help show this help message and exit-o, --only only show processes or threads actually doing I/O-b, --batch non-interactive mode-n NUM, --iter=NUM number of iterations before ending [infinite]-d SEC, --delay=SEC delay between iterations [1 second]-p PID, --pid=PID processes/threads to monitor [all]-u USER, --user=USER users to monitor [all]-P, --processes only show processes, not all threads-a, --accumulated show accumulated I/O instead of bandwidth-k, --kilobytes use kilobytes instead of a human friendly unit-t, --time add a timestamp on each line (implies --batch)-q, --quiet suppress some lines of header (implies --batch)--no-help suppress listing of shortcuts
显示 iotop 工具的帮助信息。
2.2.5 以非交互模式显示输出
root@dev:~# sudo iotop -b
----------------------------------------------------------------------------
Total DISK READ: 0.00 B/s | Total DISK WRITE: 0.00 B/s
Current DISK READ: 0.00 B/s | Current DISK WRITE: 0.00 B/sTID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % init2 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kthreadd]3 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcu_gp]4 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcu_par_gp]6 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kworker/0:0H-kbl
... ...
批量显示,无交互,主要用作记录到文件。
例如:
sudo iotop -b > iotop.txt
2.2.6 限制刷新时间间隔及次数
root@dev:~# sudo iotop -d 2 -n 3
限制 2s 刷新1次,刷新三次信息后结束。
2.2.7 指定进程 PID/ USER
- 显示进程 1 IO使用情况:
root@dev:~# sudo iotop -p 1
----------------------------------------------------------------------------
Total DISK READ: 0.00 B/s | Total DISK WRITE: 0.00 B/s
Current DISK READ: 0.00 B/s | Current DISK WRITE: 0.00 B/sTID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND 1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % initkeys: any: refresh q: quit i: ionice o: active p: procs a: accum sort: r: asc left: SWAPIN right: COMMAND home: TID end: COMMAND
显示 PID 为 1 的进程的 IO 使用情况。
- 显示 root 用户下进程的 IO 信息:
root@dev:~# sudo iotop -u root
----------------------------------------------------------------------------
Total DISK READ: 0.00 B/s | Total DISK WRITE: 10.19 K/s
Current DISK READ: 0.00 B/s | Current DISK WRITE: 20.37 K/sTID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND 296 be/3 root 0.00 B/s 10.19 K/s 0.00 % 0.10 % [jbd2/vda1-8]1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % i
... ...
2.2.8 累计显示 IO
root@dev:~# sudo iotop -a
----------------------------------------------------------------------------
Total DISK READ: 0.00 B/s | Total DISK WRITE: 0.00 B/s
Current DISK READ: 0.00 B/s | Current DISK WRITE: 0.00 B/sTID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND 296 be/3 root 0.00 B 196.00 K 0.00 % 0.05 % [jbd2/vda1-8]2839 be/4 systemd- 0.00 B 20.00 K 0.00 % 0.01 % beam.smp -W w -MBas ageffcbf -MHas ageffcbf -MBlmbcs 512 -MHlmbcs 512 -MMmcs 30 -P 1048~syslog_error_logger false -kernel prevent_overlapping_partitions false [6_dirty_io_sche]2794 be/4 root 16.00 K 16.00 K 0.00 % 0.01 % minio server /data --console-address :42115 --address :90002797 be/4 root 20.00 K 8.00 K 0.00 % 0.00 % minio server /data --console-address :42115 --address :90002897 be/4 root 0.00 B 1992.00 K 0.00 % 0.00 % minio server /data --console-address :42115 --address :9000
... ...keys: any: refresh q: quit i: ionice o: active p: procs a: bandwidth
以累计方式显示信息,数据从 iotop 命令启动开始做计算。
2.2.9 添加时间
root@dev:~# sudo iotop -t
----------------------------------------------------------------------------
00:17:42 Total DISK READ: 0.00 B/s | Total DISK WRITE: 0.00 B/s
00:17:42 Current DISK READ: 0.00 B/s | Current DISK WRITE: 0.00 B/sTIME TID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND
00:17:42 1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % init
00:17:42 2 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kthreadd]
00:17:42 3 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcu_gp]
00:17:42 4 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcu_par_gp]
00:17:42 6 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kworker/0:0H-kblockd]
这将在输出的每一行添加时间。
2.2.10 列标题打印限制
- 列标题只在第一次迭代时打印
root@dev:~# sudo iotop -q
----------------------------------------------------------------------------
Total DISK READ: 0.00 B/s | Total DISK WRITE: 0.00 B/s
Current DISK READ: 0.00 B/s | Current DISK WRITE: 0.00 B/sTID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % init2 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kthreadd]
... ...
- 不打印列标题
root@dev:~# sudo iotop -qq
----------------------------------------------------------------------------
Total DISK READ: 0.00 B/s | Total DISK WRITE: 0.00 B/s
Current DISK READ: 0.00 B/s | Current DISK WRITE: 0.00 B/s1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % init2 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kthreadd]
... ...
- 不会打印 I/O 摘要
root@dev:~# iotop -qqq
----------------------------------------------------------------------------1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % init2 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kthreadd]3 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcu_gp]4 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcu_par_gp]6 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kworker/0:0H-kblockd]
2.2.11 以 kB 单位显示读写数据信息
root@dev:~# iotop -k
----------------------------------------------------------------------------
Total DISK READ: 0.00 K/s | Total DISK WRITE: 0.00 K/s
Current DISK READ: 0.00 K/s | Current DISK WRITE: 0.00 K/sTID 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 % init2 be/4 root 0.00 K/s 0.00 K/s 0.00 % 0.00 % [kthreadd]3 be/0 root 0.00 K/s 0.00 K/s 0.00 % 0.00 % [rcu_gp]4 be/0 root 0.00 K/s 0.00 K/s 0.00 % 0.00 % [rcu_par_gp]