LinuxシステムでディスクIOを監視する方法
1. 概要
このチュートリアルでは、LinuxシステムでディスクI/Oアクティビティを監視する方法について説明します。 システムを維持しながら実行することは重要なタスクです。 基本的に、ディスクからデータを取り戻すには時間がかかります。 その結果、ディスクI / Oサブシステムは最も遅い部分と見なされ、システム全体の速度を低下させる可能性があります。
したがって、ディスクのパフォーマンスを確認することが重要です。 ボトルネックがあるかどうかとその原因を確認し、I/O要求の終了を待機しているプロセスを特定する必要があります。 この目的のために、 iostat 、 iotop、 sar 、vmstatなどのツールを使用してディスクをチェックする方法を学習します。 Linuxシステムでの/Oパフォーマンス。
2. ツールをインストールする
始める前に、ツールがまだ利用できない場合は、Linuxシステムにツールをインストールする必要があります。 ツールiostat、vmstat、、および sar は、sysstatパッケージの一部です。 iotop ツールは、iotopパッケージの一部です。
Debian、Ubuntu、またはその他の派生物にインストールするには、次のコマンドを実行します。
$ sudo apt-get install sysstat
$ sudo apt-get install iotop
RHLE、CentOS、およびFedoraの場合、以下を実行します。
$ sudo dnf install sysstat
$ sudo dnf install iotop
3. ディスクI/O統計のレポート
まず、ディスクI/Oアクティビティの概要を把握するのは興味深いことです。 この場合、iostatコマンドは便利で理解しやすいです。 入出力統計の略です。 CPUとディスクデバイスの使用率に関する情報を報告します。
現時点では、ディスクI/Oアクティビティのみに焦点を当てます。 したがって、-dオプションを使用します。
$ iostat -d
Linux 5.13.12-100.fc33.x86_64 (dhcppc5) 08/30/2021 _x86_64_ (4 CPU)
Device tps kB_read/s kB_wrtn/s kB_dscd/s kB_read kB_wrtn kB_dscd
dm-0 4.84 48.24 35.44 0.00 15064145 11067448 0
dm-1 1.00 1.41 2.60 0.00 440364 812036 0
dm-2 0.18 5.59 0.01 0.00 1747005 2788 0
dm-3 0.08 8.02 0.58 0.00 2503710 180532 0
dm-4 0.00 0.00 0.00 0.00 1272 0 0
dm-5 0.08 8.02 0.58 0.00 2503421 181956 0
sda 3.14 63.31 38.14 0.00 19772796 11911070 0
scd0 0.00 0.00 0.00 0.00 1 0 0
zram0 7.74 9.36 21.58 0.00 2924188 6738944 0
iostat コマンドを繰り返すために、秒単位で間隔を追加できます。
$ iostat -d 2
ご覧のとおり、 iostat は、システムに存在するすべてのデバイスアクティビティに関する情報を表示します。 -p オプションを追加して、ブロックデバイスとそのすべてのパーティションの統計を表示することもできます。
$ iostat -d -p sda
Device tps kB_read/s kB_wrtn/s kB_dscd/s kB_read kB_wrtn kB_dscd
sda 4.11 78.09 47.02 0.00 77566501 46701318 0
sda1 0.00 0.01 0.00 0.00 8432 6 0
sda2 4.10 78.08 47.02 0.00 77550214 46701280 0
sda3 0.00 0.01 0.00 0.00 5168 32 0
デフォルトでは、 iostat コマンドは、システムに存在するすべてのブロックデバイスとパーティションに関する情報を表示します。 メトリックがゼロのデバイスをスキップして、実際にアクティブなディスクまたはパーティションに関する情報のみを出力する場合は、-zオプションを追加できます。
$ iostat -d -z 2
Device tps kB_read/s kB_wrtn/s kB_dscd/s kB_read kB_wrtn kB_dscd
dm-0 0.50 2.00 0.00 0.00 4 0 0
sda 0.50 2.00 0.00 0.00 4 0 0
zram0 2.50 10.00 0.00 0.00 20 0 0
Device tps kB_read/s kB_wrtn/s kB_dscd/s kB_read kB_wrtn kB_dscd
dm-0 22.50 0.00 152.00 0.00 0 304 0
dm-3 0.50 64.00 0.00 0.00 128 0 0
dm-5 0.50 64.00 0.00 0.00 128 0 0
sda 16.00 64.00 148.00 0.00 128 296 0
zram0 0.50 2.00 0.00 0.00 4 0 0
4. ボトルネックの背後にあるプロセスを特定する
I / Oアクティビティを確認する方法については前に説明しましたが、それだけでは不十分な場合があります。 たとえば、どのプロセスまたはスレッドが大量のI/Oアクティビティを引き起こしているのかを特定することが重要です。 iotop コマンドは、まさにそれを行うのに役立ちます。 これは、プロセスまたはスレッドごとにリアルタイムのディスクアクティビティを提供するインタラクティブなツールです。 iotopにはroot特権またはNET_ADMIN機能が必要であることに注意してください。
また、次のカーネルオプションが有効になっているかどうかを確認する必要があります。
$ egrep '(CONFIG_VM_EVENT_COUNTERS|TASK_IO_ACCOUNTING|CONFIG_TASKSTATS|TASK_DELAY_ACCT)' /boot/config-$(uname -r)
CONFIG_TASKSTATS=y
CONFIG_TASK_DELAY_ACCT=y
CONFIG_TASK_IO_ACCOUNTING=y
CONFIG_VM_EVENT_COUNTERS=y
デフォルトでは、iotopコマンドは各プロセスまたはスレッドごとのディスクI /Oのビューを表示します:
$ sudo iotop
Total DISK READ : 18.27 K/s | Total DISK WRITE : 0.00 B/s
0.00 B DISK READ: 18.27 K/s | Actual DISK WRITE: 14.61 K/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
509 be/3 root 0.00 B/s 0.00 B/s 0.00 % 3.91 % [jbd2/dm-0-8]
247269 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.21 % [kworker/0:2-events]
2507 be/4 nwd 18.27 K/s 0.00 B/s 3.57 % 0.00 % gnome-terminal-server
1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % systemd --switched-root --system --deserialize 30
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-events_highpri]
9 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [mm_percpu_wq]
10 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcu_tasks_kthre]
11 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcu_tasks_rude_]
12 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcu_tasks_trace]
13 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ksoftirqd/0]
14 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcu_sched]
-o オプションを使用して、実際にI/Oアクティビティを実行しているプロセスまたはスレッドのみを表示できます。
$ sudo iotop -o
Total DISK READ : 1864.38 K/s | Total DISK WRITE : 0.00 B/s
10.34l DISK READ: 1875.65 K/s | Actual DISK WRITE: 0.00 B/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
245778 be/4 nwd 608.93 K/s 0.00 B/s 62.08 % 34.04 % firefox -contentproc -childID 3 -isForBrowser -prefs~46 -appdir /usr/lib64/firefox/browser 245562 true tab
1822 be/4 nwd 105.25 K/s 0.00 B/s 0.00 % 14.13 % gnome-shell
2507 be/4 nwd 139.08 K/s 0.00 B/s 0.00 % 1.48 % gnome-terminal-server
245562 be/4 nwd 206.74 K/s 0.00 B/s 93.98 % 0.00 % firefox
246053ble_ponwd ] 18.79 K/s 0.00 B/s 24.22 % 0.00 % firefox -contentproc -childID 5 -isForBrowser -prefs~sr/lib64/firefox/browser 245562 true tab [DOM Worker]
247924 be/4 nwd 127.80 K/s 0.00 B/s 44.84 % 0.00 % vlc --started-from-file /home/nwd/Music/Mozart Allegro assai.mp4
247956 be/4 nwd 657.79 K/s 0.00 B/s 38.89 % 0.00 % dd if=/dev/zero of=/tmp/test.img bs=1G oflag=dsync
-P オプションを追加して、スレッドのないプロセスのリストを表示できます。
$sudo iotop -oP
5. 一定期間にわたるディスクI/O統計の生成
以前、ディスクアクティビティをリアルタイムで監視する方法を学びましたが、1週間以上の履歴データを収集する必要がある場合があります。 目標は、分析に十分なデータを収集するか、将来の進化を計画することです。 これを行う最も簡単な方法は、sarコマンド。を使用することです。
デフォルトでは、sarコマンドはすべてのシステムリソースを監視します。 この場合、関心があるのはディスクアクティビティのみです。 -b オプションを使用して、ディスクアクティビティに関する詳細を報告しましょう。
$ sar -b 1
...
04:10:00 PM tps rtps wtps dtps bread/s bwrtn/s bdscd/s
04:10:01 PM 12.00 0.00 12.00 0.00 0.00 176.00 0.00
04:10:02 PM 35.00 31.00 4.00 0.00 1272.00 80.00 0.00
04:10:03 PM 0.00 0.00 0.00 0.00 0.00 0.00 0.00
04:10:04 PM 73.00 0.00 73.00 0.00 0.00 648.00 0.00
04:10:05 PM 0.00 0.00 0.00 0.00 0.00 0.00 0.00
04:10:06 PM 22.00 0.00 22.00 0.00 0.00 192.00 0.00
04:10:07 PM 1.00 0.00 1.00 0.00 0.00 8.00 0.00
04:10:08 PM 4.00 0.00 4.00 0.00 0.00 112.00 0.00
-d オプションを使用して、各ブロックデバイスのアクティビティを報告できます。 -p オプションを使用して、デバイスを簡単に識別することもできます。
$ sar -p -d -b 1
04:26:15 PM DEV tps rkB/s wkB/s dkB/s areq-sz aqu-sz await %util
04:26:16 PM sda 2.00 128.00 52.00 0.00 90.00 0.00 0.50 0.40
04:26:16 PM sr0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
04:26:16 PM lv-root 1.00 0.00 52.00 0.00 52.00 0.00 1.00 0.20
04:26:16 PM lv-swap 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
04:26:16 PM zram0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
04:26:16 PM lv-home 1.00 128.00 0.00 0.00 128.00 0.00 1.00 0.20
...
sarコマンドの出力を-oオプションを使用してファイルに保存することができます。 ファイルはバイナリ形式であることに注意してください。
$ sar 2 5 -o /tmp/data_io > /dev/null 2>&1
次に、 -f オプションを使用して、ファイルに保存されているsarコマンドによって生成されたレポートを読み取ります。
$ sar -f /tmp/data_io
6. vmstatを使用してディスクI/O使用量を測定する
もう1つの便利なツールはvmstatで、システムで何が起こっているかを全体的に把握できます。 たとえば、 vmstat コマンドを使用して、プロセス、メモリ、およびCPUに関する情報を報告し、ディスクI/Oアクティビティを表示できます。
vmstatを使用してシステムからディスクI/O統計を取得するには、を呼び出します。
$ vmstat [-D] [-d] [-p partition] [interval [count]]
-d オプションを使用して、個々のディスク統計を表示します。
$ vmstat -d 1
isk- ------------reads------------ ------------writes----------- -----IO------
total merged sectors ms total merged sectors ms cur sec
sda 2659118 1531393 166084689 49623955 1725402 4672072 104580917 70770454 0 25194
sr0 24187 28 5886957 1315209 0 0 0 0 0 966
dm-0 2178560 0 114338954 50785360 3433060 0 81458000 79180110 0 21302
dm-1 1605211 0 12845592 24735782 2946339 0 23570712 947720915 0 5866
zram0 2609461 0 20875688 26812 4958733 0 39669864 57039 0 511
dm-2 312586 0 21187074 3814922 2852 0 49288 76928 0 674
dm-3 88452 0 17673344 640177 4957 0 526864 104362 0 537
...
次に、 -p オプションを導入して、パーティションに関する詳細なパフォーマンス統計を取得します。
$ vmstat -p /dev/sda2 1
sda2 reads read sectors writes requested writes
2663617 166204812 1725915 104595152
2663617 166204812 1725915 104595152
2663617 166204812 1725915 104595152
2663618 166205068 1725915 104595152
2663618 166205068 1725917 104595216
...
7. 結論
この記事では、 iostat、vmstat、、およびsarコマンドを使用してディスクI/Oのパフォーマンスを確認する方法を学びました。 また、 iotop コマンドを使用して、プロセスごとにディスクの読み取りおよび書き込みアクティビティを確認する方法についても説明しました。