iotopを使ってみる

はじめに

topライクなI/Omonitorツールのiotopを使ってみる。

環境

Windows 11 Professional
WSL2 Ubuntu 24.04 LTS

インストール

https://packages.ubuntu.com/noble/admin/iotop

sudo apt install iotop
ログ
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following NEW packages will be installed:
  iotop
0 upgraded, 1 newly installed, 0 to remove and 13 not upgraded.
Need to get 24.4 kB of archives.
After this operation, 111 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu noble/main amd64 iotop amd64 0.6-42-ga14256a-0.2build1 [24.4 kB]
Fetched 24.4 kB in 1s (24.6 kB/s)
Selecting previously unselected package iotop.
(Reading database ... 49952 files and directories currently installed.)
Preparing to unpack .../iotop_0.6-42-ga14256a-0.2build1_amd64.deb ...
Unpacking iotop (0.6-42-ga14256a-0.2build1) ...
Setting up iotop (0.6-42-ga14256a-0.2build1) ...
update-alternatives: using /usr/sbin/iotop-py to provide /usr/sbin/iotop (iotop) in auto mode
Processing triggers for man-db (2.12.0-4build2) ...

使ってみる

sudo iotop

下記のように表示されればOK

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>    COMMAND                                                                      1 be/4 root        0.00 B/s    0.00 B/s init
    2 be/4 root        0.00 B/s    0.00 B/s init
    9 be/4 root        0.00 B/s    0.00 B/s init [Interop]
    7 be/4 root        0.00 B/s    0.00 B/s plan9 --control-socket 6 --log-level ~server-fd 7 --pipe-fd 9 --log-truncate    8 be/4 root        0.00 B/s    0.00 B/s plan9 --control-socket 6 --log-level ~server-fd 7 --pipe-fd 9 --log-truncate
   44 be/3 root        0.00 B/s    0.00 B/s systemd-journald                                                               87 be/4 root        0.00 B/s    0.00 B/s systemd-udevd
  100 be/4 root        0.00 B/s    0.00 B/s snapfuse /var/lib/snapd/snaps/core22_~re22/1621 -o ro,nodev,allow_other,suid  101 be/4 root        0.00 B/s    0.00 B/s snapfuse /var/lib/snapd/snaps/core22_~re22/1621 -o ro,nodev,allow_other,suid  102 be/4 root        0.00 B/s    0.00 B/s snapfuse /var/lib/snapd/snaps/core22_~re22/1621 -o ro,nodev,allow_other,suid  103 be/4 root        0.00 B/s    0.00 B/s snapfuse /var/lib/snapd/snaps/core_17~ore/17200 -o ro,nodev,allow_other,suid  105 be/4 root        0.00 B/s    0.00 B/s snapfuse /var/lib/snapd/snaps/core_17~ore/17200 -o ro,nodev,allow_other,suid  107 be/4 root        0.00 B/s    0.00 B/s snapfuse /var/lib/snapd/snaps/core_17~ore/17200 -o ro,nodev,allow_other,suid  731 be/4 root        0.00 B/s    0.00 B/s snapfuse /var/lib/snapd/snaps/core_17~ore/17200 -o ro,nodev,allow_other,suid  732 be/4 root        0.00 B/s    0.00 B/s snapfuse /var/lib/snapd/snaps/core_17~ore/17200 -o ro,nodev,allow_other,suid  106 be/4 root        0.00 B/s    0.00 B/s snapfuse /var/lib/snapd/snaps/tree_18~p/tree/18 -o ro,nodev,allow_other,suid  108 be/4 root        0.00 B/s    0.00 B/s snapfuse /var/lib/snapd/snaps/tree_18~p/tree/18 -o ro,nodev,allow_other,suid  109 be/4 root        0.00 B/s    0.00 B/s snapfuse /var/lib/snapd/snaps/tree_18~p/tree/18 -o ro,nodev,allow_other,suid  110 be/4 root        0.00 B/s    0.00 B/s snapfuse /var/lib/snapd/snaps/tree_54~p/tree/54 -o ro,nodev,allow_other,suid  111 be/4 root        0.00 B/s    0.00 B/s snapfuse /var/lib/snapd/snaps/tree_54~p/tree/54 -o ro,nodev,allow_other,suid  112 be/4 root        0.00 B/s    0.00 B/s snapfuse /var/lib/snapd/snaps/tree_54~p/tree/54 -o ro,nodev,allow_other,suid  154 be/4 systemd-    0.00 B/s    0.00 B/s systemd-resolved
  158 be/4 systemd-    0.00 B/s    0.00 B/s systemd-timesyncd
  168 be/4 systemd-    0.00 B/s    0.00 B/s systemd-timesyncd [sd-resolve]

※ユーザ権限では使えないので root権限で実行する必要がある。
ユーザ権限でコマンドを実行しようとすると、以下のようにエラーになる。

 ~  iotop                                                                                           ✔ │ 10s │ 20:33:54
Netlink error: Operation not permitted (1)

The Linux kernel interfaces that iotop relies on now require root privileges
or the NET_ADMIN capability. This change occurred because a security issue
(CVE-2011-2494) was found that allows leakage of sensitive data across user
boundaries. If you require the ability to run iotop as a non-root user, please
configure sudo to allow you to run iotop as root.

Please do not file bugs on iotop about this.

ヘルプ

オプション説明
--versionプログラムのバージョン番号を表示して終了する
-h, --helpこのヘルプメッセージを表示して終了する
-o, --only実際に I/O を行っているプロセスやスレッドのみを表示する
-b, --batch非対話モードで実行する
-n NUM, --iter=NUM指定された回数のイテレーション後に終了する(無限回繰り返しがデフォルト)
-d SEC, --delay=SEC各イテレーション間の遅延時間を指定する(デフォルトは1秒)
-p PID, --pid=PID監視するプロセスやスレッドを指定する(デフォルトはすべて)
-u USER, --user=USER監視するユーザーを指定する(デフォルトはすべて)
-P, --processesプロセスのみを表示し、すべてのスレッドを表示しません
-a, --accumulated帯域幅の代わりに累積された I/O を表示する
-k, --kilobytes人間に読みやすい単位の代わりにキロバイト単位を使用する
-t, --time各行にタイムスタンプを追加する(–batch オプションを暗黙的に有効にする)
-q, --quiet一部のヘッダー行を抑制する(–batch オプションを暗黙的に有効にする)
--no-helpショートカットのリストを表示しないようにする

オプション

  • iotop -o: ディスク I/O を実際に行っているプロセスのみを表示
  • iotop -b: バッチモードで使用し、画面の更新なしで定期的に I/O 状況を記録
  • iotop -P: プロセス単位で表示 (TIDではなくPIDで表示)
  • iotop -a: 累積 I/O の表示を有効にする。時間が経過しても I/O の合計がリセットされない

見方

カラム説明
TIDスレッドID
PRIOI/O の優先度。be/4 は、best-effort(標準の優先度)を意味する。数字が小さいほど優先度が高い
USERプロセスを実行しているユーザー
DISK READプロセスによるディスク読み取り速度 (Bytes/s, K/s など)
DISK WRITEプロセスによるディスク書き込み速度 (Bytes/s, K/s など)
SWAPINスワップの使用率 (% 表示)。プロセスがスワップインしている割合
IOプロセスがディスク I/O にどれだけ時間を費やしているか (%)。高い数値でリソース消費が大きいことを示す
COMMAND実行中のコマンドの名前またはプロセス

参考

おわりに

**stat, **top系のコマンドは今までも使ってきたので、今回は io系のコマンドを調べた。
ボトルネック調査に使うかもしれないのでメモ書きとして記事にした。

Hugo で構築されています。
テーマ StackJimmy によって設計されています。