用于測(cè)量磁盤活動(dòng)的Linux命令
Linux 發(fā)行版提供了幾個(gè)度量磁盤活動(dòng)的有用命令。讓我們了解一下其中的幾個(gè)。
Linux 系統(tǒng)提供了一套方便的命令,幫助你查看磁盤有多忙,而不僅僅是磁盤有多滿。在本文中,我們將研究五個(gè)非常有用的命令,用于查看磁盤活動(dòng)。其中兩個(gè)命令(iostat
和 ioping
)可能必須添加到你的系統(tǒng)中,這兩個(gè)命令一樣要求你使用 sudo 特權(quán),所有這五個(gè)命令都提供了查看磁盤活動(dòng)的有用方法。
這些命令中最簡(jiǎn)單、最直觀的一個(gè)可能是 dstat
了。
dtstat
盡管 dstat
命令以字母 “d” 開(kāi)頭,但它提供的統(tǒng)計(jì)信息遠(yuǎn)遠(yuǎn)不止磁盤活動(dòng)。如果你只想查看磁盤活動(dòng),可以使用 -d
選項(xiàng)。如下所示,你將得到一個(gè)磁盤讀/寫測(cè)量值的連續(xù)列表,直到使用 CTRL-c
停止顯示為止。注意,在第一個(gè)報(bào)告信息之后,顯示中的每個(gè)后續(xù)行將在接下來(lái)的時(shí)間間隔內(nèi)報(bào)告磁盤活動(dòng),缺省值僅為一秒。
$ dstat -d
-dsk/total-
read writ
949B 73k
65k 0 <== first second
0 24k <== second second
0 16k
0 0 ^C
在 -d
選項(xiàng)后面包含一個(gè)數(shù)字將把間隔設(shè)置為該秒數(shù)。
$ dstat -d 10
-dsk/total-
read writ
949B 73k
65k 81M <== first five seconds
0 21k <== second five second
0 9011B ^C
請(qǐng)注意,報(bào)告的數(shù)據(jù)可能以許多不同的單位顯示——例如,M(Mb)、K(Kb)和 B(字節(jié))。
如果沒(méi)有選項(xiàng),dstat
命令還將顯示許多其他信息——指示 CPU 如何使用時(shí)間、顯示網(wǎng)絡(luò)和分頁(yè)活動(dòng)、報(bào)告中斷和上下文切換。
$ dstat
You 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
命令提供了關(guān)于整個(gè) Linux 系統(tǒng)性能的有價(jià)值的見(jiàn)解,幾乎可以用它靈活而功能強(qiáng)大的命令來(lái)代替 vmstat
、netstat
、iostat
和 ifstat
等較舊的工具集合,該命令結(jié)合了這些舊工具的功能。要深入了解 dstat
命令可以提供的其它信息,請(qǐng)參閱這篇關(guān)于 dstat 命令的文章。
iostat
iostat
命令通過(guò)觀察設(shè)備活動(dòng)的時(shí)間與其平均傳輸速率之間的關(guān)系,幫助監(jiān)視系統(tǒng)輸入/輸出設(shè)備的加載情況。它有時(shí)用于評(píng)估磁盤之間的活動(dòng)平衡。
$ iostat
Linux 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.85
Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
loop0 0.00 0.00 0.00 1048 0
loop1 0.00 0.00 0.00 365 0
loop2 0.00 0.00 0.00 1056 0
loop3 0.00 0.01 0.00 16169 0
loop4 0.00 0.00 0.00 413 0
loop5 0.00 0.00 0.00 1184 0
loop6 0.00 0.00 0.00 1062 0
loop7 0.00 0.00 0.00 5261 0
sda 1.06 0.89 72.66 2837453 232735080
sdb 0.00 0.02 0.00 48669 40
loop8 0.00 0.00 0.00 1053 0
loop9 0.01 0.01 0.00 18949 0
loop10 0.00 0.00 0.00 56 0
loop11 0.00 0.00 0.00 7090 0
loop12 0.00 0.00 0.00 1160 0
loop13 0.00 0.00 0.00 108 0
loop14 0.00 0.00 0.00 3572 0
loop15 0.01 0.01 0.00 20026 0
loop16 0.00 0.00 0.00 24 0
當(dāng)然,當(dāng)你只想關(guān)注磁盤時(shí),Linux 回環(huán)設(shè)備上提供的所有統(tǒng)計(jì)信息都會(huì)使結(jié)果顯得雜亂無(wú)章。不過(guò),該命令也確實(shí)提供了 -p
選項(xiàng),該選項(xiàng)使你可以僅查看磁盤——如以下命令所示。
$ iostat -p sda
Linux 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.85
Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 1.06 0.89 72.54 2843737 232815784
sda1 1.04 0.88 72.54 2821733 232815784
請(qǐng)注意 tps
是指每秒的傳輸量。
你還可以讓 iostat
提供重復(fù)的報(bào)告。在下面的示例中,我們使用 -d
選項(xiàng)每五秒鐘進(jìn)行一次測(cè)量。
$ iostat -p sda -d 5
Linux 4.18.0-041800-generic (butterfly) 12/26/2018 _x86_64_ (2 CPU)
Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 1.06 0.89 72.51 2843749 232834048
sda1 1.04 0.88 72.51 2821745 232834048
Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 0.80 0.00 11.20 0 56
sda1 0.80 0.00 11.20 0 56
如果你希望省略第一個(gè)(自啟動(dòng)以來(lái)的統(tǒng)計(jì)信息)報(bào)告,請(qǐng)?jiān)诿钪刑砑?-y
。
$ iostat -p sda -d 5 -y
Linux 4.18.0-041800-generic (butterfly) 12/26/2018 _x86_64_ (2 CPU)
Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 0.80 0.00 11.20 0 56
sda1 0.80 0.00 11.20 0 56
接下來(lái),我們看第二個(gè)磁盤驅(qū)動(dòng)器。
$ iostat -p sdb
Linux 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.85
Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sdb 0.00 0.02 0.00 48669 40
sdb2 0.00 0.00 0.00 4861 40
sdb1 0.00 0.01 0.00 35344 0
iotop
iotop
命令是類似 top
的實(shí)用程序,用于查看磁盤 I/O。它收集 Linux 內(nèi)核提供的 I/O 使用信息,以便你了解哪些進(jìn)程在磁盤 I/O 方面的要求最高。在下面的示例中,循環(huán)時(shí)間被設(shè)置為 5 秒。顯示將自動(dòng)更新,覆蓋前面的輸出。
$ sudo iotop -d 5
Total DISK READ: 0.00 B/s | Total DISK WRITE: 1585.31 B/s
Current DISK READ: 0.00 B/s | Current DISK WRITE: 12.39 K/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
32492 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
ioping
命令是一種完全不同的工具,但是它可以報(bào)告磁盤延遲——也就是磁盤響應(yīng)請(qǐng)求需要多長(zhǎng)時(shí)間,而這有助于診斷磁盤問(wèn)題。
$ sudo ioping /dev/sda1
4 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 us
4 KiB <<< /dev/sda1 (block device 111.8 GiB): request=3 time=831.0 us
4 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/s
generated 4 requests in 3.37 s, 16 KiB, 1 iops, 4.75 KiB/s
min/avg/max/mdev = 831.0 us / 947.9 us / 1.17 ms / 158.0 us
atop
atop
命令,像 top
一樣提供了大量有關(guān)系統(tǒng)性能的信息,包括有關(guān)磁盤活動(dòng)的一些統(tǒng)計(jì)信息。
ATOP - butterfly 2018/12/26 17:24:19 37d3h13m------ 10ed
PRC | 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>
如果你只想查看磁盤統(tǒng)計(jì)信息,則可以使用以下命令輕松進(jìn)行管理:
$ atop | grep DSK
DSK | 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 提供了足夠的命令,可以讓你很好地了解磁盤的工作強(qiáng)度,并幫助你關(guān)注潛在的問(wèn)題或減緩。希望這些命令中的一個(gè)可以告訴你何時(shí)需要質(zhì)疑磁盤性能。偶爾使用這些命令將有助于確保當(dāng)你需要檢查磁盤,特別是忙碌或緩慢的磁盤時(shí)可以顯而易見(jiàn)地發(fā)現(xiàn)它們。