用于測量磁盤活動的Linux命令
Linux 發行版提供了幾個度量磁盤活動的有用命令。讓我們了解一下其中的幾個。
Linux 系統提供了一套方便的命令,幫助你查看磁盤有多忙,而不僅僅是磁盤有多滿。在本文中,我們將研究五個非常有用的命令,用于查看磁盤活動。其中兩個命令(iostat 和 ioping)可能必須添加到你的系統中,這兩個命令一樣要求你使用 sudo 特權,所有這五個命令都提供了查看磁盤活動的有用方法。
這些命令中最簡單、最直觀的一個可能是 dstat 了。
dtstat
盡管 dstat 命令以字母 “d” 開頭,但它提供的統計信息遠遠不止磁盤活動。如果你只想查看磁盤活動,可以使用 -d 選項。如下所示,你將得到一個磁盤讀/寫測量值的連續列表,直到使用 CTRL-c 停止顯示為止。注意,在第一個報告信息之后,顯示中的每個后續行將在接下來的時間間隔內報告磁盤活動,缺省值僅為一秒。
$ dstat -d-dsk/total-read writ949B 73k65k 0 <== first second0 24k <== second second0 16k0 0 ^C
在 -d 選項后面包含一個數字將把間隔設置為該秒數。
$ dstat -d 10-dsk/total-read writ949B 73k65k 81M <== first five seconds0 21k <== second five second0 9011B ^C
請注意,報告的數據可能以許多不同的單位顯示——例如,M(Mb)、K(Kb)和 B(字節)。
如果沒有選項,dstat 命令還將顯示許多其他信息——指示 CPU 如何使用時間、顯示網絡和分頁活動、報告中斷和上下文切換。
$ dstatYou did not select any stats, using -cdngy by default.--total-cpu-usage-- -dsk/total- -net/total- ---paging-- ---system--usr sys idl wai stl| read writ| recv send| in out | int csw0 0 100 0 0| 949B 73k| 0 0 | 0 3B| 38 650 0 100 0 0| 0 0 | 218B 932B| 0 0 | 53 680 1 99 0 0| 0 16k| 64B 468B| 0 0 | 64 81 ^C
dstat 命令提供了關于整個 Linux 系統性能的有價值的見解,幾乎可以用它靈活而功能強大的命令來代替 vmstat、netstat、iostat 和 ifstat 等較舊的工具集合,該命令結合了這些舊工具的功能。要深入了解 dstat 命令可以提供的其它信息,請參閱這篇關于 dstat 命令的文章。
iostat
iostat 命令通過觀察設備活動的時間與其平均傳輸速率之間的關系,幫助監視系統輸入/輸出設備的加載情況。它有時用于評估磁盤之間的活動平衡。
$ iostatLinux 4.18.0-041800-generic (butterfly) 12/26/2018 _x86_64_ (2 CPU)avg-cpu: %user %nice %system %iowait %steal %idle0.07 0.01 0.03 0.05 0.00 99.85Device tps kB_read/s kB_wrtn/s kB_read kB_wrtnloop0 0.00 0.00 0.00 1048 0loop1 0.00 0.00 0.00 365 0loop2 0.00 0.00 0.00 1056 0loop3 0.00 0.01 0.00 16169 0loop4 0.00 0.00 0.00 413 0loop5 0.00 0.00 0.00 1184 0loop6 0.00 0.00 0.00 1062 0loop7 0.00 0.00 0.00 5261 0sda 1.06 0.89 72.66 2837453 232735080sdb 0.00 0.02 0.00 48669 40loop8 0.00 0.00 0.00 1053 0loop9 0.01 0.01 0.00 18949 0loop10 0.00 0.00 0.00 56 0loop11 0.00 0.00 0.00 7090 0loop12 0.00 0.00 0.00 1160 0loop13 0.00 0.00 0.00 108 0loop14 0.00 0.00 0.00 3572 0loop15 0.01 0.01 0.00 20026 0loop16 0.00 0.00 0.00 24 0
當然,當你只想關注磁盤時,Linux 回環設備上提供的所有統計信息都會使結果顯得雜亂無章。不過,該命令也確實提供了 -p 選項,該選項使你可以僅查看磁盤——如以下命令所示。
$ iostat -p sdaLinux 4.18.0-041800-generic (butterfly) 12/26/2018 _x86_64_ (2 CPU)avg-cpu: %user %nice %system %iowait %steal %idle0.07 0.01 0.03 0.05 0.00 99.85Device tps kB_read/s kB_wrtn/s kB_read kB_wrtnsda 1.06 0.89 72.54 2843737 232815784sda1 1.04 0.88 72.54 2821733 232815784
請注意 tps 是指每秒的傳輸量。
你還可以讓 iostat 提供重復的報告。在下面的示例中,我們使用 -d 選項每五秒鐘進行一次測量。
$ iostat -p sda -d 5Linux 4.18.0-041800-generic (butterfly) 12/26/2018 _x86_64_ (2 CPU)Device tps kB_read/s kB_wrtn/s kB_read kB_wrtnsda 1.06 0.89 72.51 2843749 232834048sda1 1.04 0.88 72.51 2821745 232834048Device tps kB_read/s kB_wrtn/s kB_read kB_wrtnsda 0.80 0.00 11.20 0 56sda1 0.80 0.00 11.20 0 56
如果你希望省略第一個(自啟動以來的統計信息)報告,請在命令中添加 -y。
$ iostat -p sda -d 5 -yLinux 4.18.0-041800-generic (butterfly) 12/26/2018 _x86_64_ (2 CPU)Device tps kB_read/s kB_wrtn/s kB_read kB_wrtnsda 0.80 0.00 11.20 0 56sda1 0.80 0.00 11.20 0 56
接下來,我們看第二個磁盤驅動器。
$ iostat -p sdbLinux 4.18.0-041800-generic (butterfly) 12/26/2018 _x86_64_ (2 CPU)avg-cpu: %user %nice %system %iowait %steal %idle0.07 0.01 0.03 0.05 0.00 99.85Device tps kB_read/s kB_wrtn/s kB_read kB_wrtnsdb 0.00 0.02 0.00 48669 40sdb2 0.00 0.00 0.00 4861 40sdb1 0.00 0.01 0.00 35344 0
iotop
iotop 命令是類似 top 的實用程序,用于查看磁盤 I/O。它收集 Linux 內核提供的 I/O 使用信息,以便你了解哪些進程在磁盤 I/O 方面的要求最高。在下面的示例中,循環時間被設置為 5 秒。顯示將自動更新,覆蓋前面的輸出。
$ sudo iotop -d 5Total DISK READ: 0.00 B/s | Total DISK WRITE: 1585.31 B/sCurrent DISK READ: 0.00 B/s | Current DISK WRITE: 12.39 K/sTID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND32492 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.12 % [kworker/u8:1-ev~_power_efficient]208 be/3 root 0.00 B/s 1585.31 B/s 0.00 % 0.11 % [jbd2/sda1-8]1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % init splash2 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]8 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [mm_percpu_wq]
ioping
ioping 命令是一種完全不同的工具,但是它可以報告磁盤延遲——也就是磁盤響應請求需要多長時間,而這有助于診斷磁盤問題。
$ sudo ioping /dev/sda14 KiB <<< /dev/sda1 (block device 111.8 GiB): request=1 time=960.2 us (warmup)4 KiB <<< /dev/sda1 (block device 111.8 GiB): request=2 time=841.5 us4 KiB <<< /dev/sda1 (block device 111.8 GiB): request=3 time=831.0 us4 KiB <<< /dev/sda1 (block device 111.8 GiB): request=4 time=1.17 ms^C--- /dev/sda1 (block device 111.8 GiB) ioping statistics ---3 requests completed in 2.84 ms, 12 KiB read, 1.05 k iops, 4.12 MiB/sgenerated 4 requests in 3.37 s, 16 KiB, 1 iops, 4.75 KiB/smin/avg/max/mdev = 831.0 us / 947.9 us / 1.17 ms / 158.0 us
atop
atop 命令,像 top 一樣提供了大量有關系統性能的信息,包括有關磁盤活動的一些統計信息。
ATOP - butterfly 2018/12/26 17:24:19 37d3h13m------ 10edPRC | sys 0.03s | user 0.01s | #proc 179 | #zombie 0 | #exit 6 |CPU | sys 1% | user 0% | irq 0% | idle 199% | wait 0% |cpu | sys 1% | user 0% | irq 0% | idle 99% | cpu000 w 0% |CPL | avg1 0.00 | avg5 0.00 | avg15 0.00 | csw 677 | intr 470 |MEM | tot 5.8G | free 223.4M | cache 4.6G | buff 253.2M | slab 394.4M |SWP | tot 2.0G | free 2.0G | | vmcom 1.9G | vmlim 4.9G |DSK | sda | busy 0% | read 0 | write 7 | avio 1.14 ms |NET | transport | tcpi 4 | tcpo stall 8 | udpi 1 | udpo 0swout 2255 |NET | network | ipi 10 | ipo 7 | ipfrw 0 | deliv 60.67 ms |NET | enp0s25 0% | pcki 10 | pcko 8 | si 1 Kbps | so 3 Kbp0.73 ms |PID SYSCPU USRCPU VGROW RGROW ST EXC THR S CPUNR CPU CMD 1/1673e4 |3357 0.01s 0.00s 672K 824K -- - 1 R 0 0% atop3359 0.01s 0.00s 0K 0K NE 0 0 E - 0% <ps>3361 0.00s 0.01s 0K 0K NE 0 0 E - 0% <ps>3363 0.01s 0.00s 0K 0K NE 0 0 E - 0% <ps>31357 0.00s 0.00s 0K 0K -- - 1 S 1 0% bash3364 0.00s 0.00s 8032K 756K N- - 1 S 1 0% sleep2931 0.00s 0.00s 0K 0K -- - 1 I 1 0% kworker/u8:2-e3356 0.00s 0.00s 0K 0K -E 0 0 E - 0% <sleep>3360 0.00s 0.00s 0K 0K NE 0 0 E - 0% <sleep>3362 0.00s 0.00s 0K 0K NE 0 0 E - 0% <sleep>
如果你只想查看磁盤統計信息,則可以使用以下命令輕松進行管理:
$ atop | grep DSKDSK | sda | busy 0% | read 122901 | write 3318e3 | avio 0.67 ms |DSK | sdb | busy 0% | read 1168 | write 103 | avio 0.73 ms |DSK | sda | busy 2% | read 0 | write 92 | avio 2.39 ms |DSK | sda | busy 2% | read 0 | write 94 | avio 2.47 ms |DSK | sda | busy 2% | read 0 | write 99 | avio 2.26 ms |DSK | sda | busy 2% | read 0 | write 94 | avio 2.43 ms |DSK | sda | busy 2% | read 0 | write 94 | avio 2.43 ms |DSK | sda | busy 2% | read 0 | write 92 | avio 2.43 ms |^C
了解磁盤 I/O
Linux 提供了足夠的命令,可以讓你很好地了解磁盤的工作強度,并幫助你關注潛在的問題或減緩。希望這些命令中的一個可以告訴你何時需要質疑磁盤性能。偶爾使用這些命令將有助于確保當你需要檢查磁盤,特別是忙碌或緩慢的磁盤時可以顯而易見地發現它們。




















