はじめに
top
ライクなI/O
monitorツールの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 |
PRIO | I/O の優先度。be/4 は、best-effort(標準の優先度)を意味する。数字が小さいほど優先度が高い |
USER | プロセスを実行しているユーザー |
DISK READ | プロセスによるディスク読み取り速度 (Bytes/s, K/s など) |
DISK WRITE | プロセスによるディスク書き込み速度 (Bytes/s, K/s など) |
SWAPIN | スワップの使用率 (% 表示)。プロセスがスワップインしている割合 |
IO | プロセスがディスク I/O にどれだけ時間を費やしているか (%)。高い数値でリソース消費が大きいことを示す |
COMMAND | 実行中のコマンドの名前またはプロセス |
参考
iotopコマンドの使い方
https://hana-shin.hatenablog.com/entry/2022/04/16/202946Linux iostatとiotop コマンドでディスク負荷を確認する
https://tec-memo.com/linux-iostat-iotop/
おわりに
**stat
, **top
系のコマンドは今までも使ってきたので、今回は io
系のコマンドを調べた。
ボトルネック調査に使うかもしれないのでメモ書きとして記事にした。