Linux 發行版提供了幾個度量磁碟活動的有用命令。讓我們了解一下其中的幾個。
Linux 系統提供了一套方便的命令,幫助你檢視磁碟有多忙,而不僅僅是磁碟有多滿。在本文中,我們將研究五個非常有用的命令,用於檢視磁碟活動。其中兩個命令(iostat
和 ioping
)可能必須新增到你的系統中,這兩個命令一樣要求你使用 sudo 特權,所有這五個命令都提供了檢視磁碟活動的有用方法。
這些命令中最簡單、最直觀的一個可能是 dstat
了。
儘管 dstat
命令以字母 “d” 開頭,但它提供的統計資訊遠遠不止磁碟活動。如果你只想檢視磁碟活動,可以使用 -d
選項。如下所示,你將得到一個磁碟讀/寫測量值的連續列表,直到使用 CTRL-c
停止顯示為止。注意,在第一個報告資訊之後,顯示中的每個後續行將在接下來的時間間隔內報告磁碟活動,預設值僅為一秒。
$ dstat -d-dsk/total- read writ 949B 73k 65k 0 <== first second 0 24k <== second second 0 16k 0 0 ^C
在 -d
選項後面包含一個數位將把間隔設定為該秒數。
$ dstat -d 10-dsk/total- read writ 949B 73k 65k 81M <== first five seconds 0 21k <== second five second 0 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 csw 0 0 100 0 0| 949B 73k| 0 0 | 0 3B| 38 65 0 0 100 0 0| 0 0 | 218B 932B| 0 0 | 53 68 0 1 99 0 0| 0 16k| 64B 468B| 0 0 | 64 81 ^C
dstat
命令提供了關於整個 Linux 系統效能的有價值的見解,幾乎可以用它靈活而功能強大的命令來代替 vmstat
、netstat
、iostat
和 ifstat
等較舊的工具集合,該命令結合了這些舊工具的功能。要深入了解 dstat
命令可以提供的其它資訊,請參閱這篇關於 dstat 命令的文章。
iostat
命令通過觀察裝置活動的時間與其平均傳輸速率之間的關係,幫助監視系統輸入/輸出裝置的載入情況。它有時用於評估磁碟之間的活動平衡。
$ iostatLinux 4.18.0-041800-generic (butterfly) 12/26/2018 _x86_64_ (2 CPU)avg-cpu: %user %nice %system %iowait %steal %idle 0.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 %idle 0.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 %idle 0.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
命令是類似 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/s TID 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 splash 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] 8 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [mm_percpu_wq]
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
命令,像 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% atop 3359 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% bash 3364 0.00s 0.00s 8032K 756K N- - 1 S 1 0% sleep 2931 0.00s 0.00s 0K 0K -- - 1 I 1 0% kworker/u8:2-e 3356 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
Linux 提供了足夠的命令,可以讓你很好地了解磁碟的工作強度,並幫助你關注潛在的問題或減緩。希望這些命令中的一個可以告訴你何時需要質疑磁碟效能。偶爾使用這些命令將有助於確保當你需要檢查磁碟,特別是忙碌或緩慢的磁碟時可以顯而易見地發現它們。