Linux 命令:iotop

1. 写在前面

本文主要介绍 Linux iotopInput/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/s
    TID  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 % init
      2 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/s
    TID  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/s
    TID  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 % init
      2 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/s
    TID  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 % init
  keys:  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/s
    TID  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/s
    TID  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 :9000
   2797 be/4 root         20.00 K      8.00 K  0.00 %  0.00 % minio server /data --console-address :42115 --address :9000
   2897 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/s
    TIME    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/s
    TID  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 % init
      2 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/s
      1 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % init
      2 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 % init
      2 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/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 % init
      2 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]
感谢您花时间阅读文章!
关注公众号不迷路!
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值