用於測量磁碟活動的 Linux 命令

2019-09-25 09:21:00

Linux 發行版提供了幾個度量磁碟活動的有用命令。讓我們了解一下其中的幾個。

Linux 系統提供了一套方便的命令,幫助你檢視磁碟有多忙,而不僅僅是磁碟有多滿。在本文中,我們將研究五個非常有用的命令,用於檢視磁碟活動。其中兩個命令(iostatioping)可能必須新增到你的系統中,這兩個命令一樣要求你使用 sudo 特權,所有這五個命令都提供了檢視磁碟活動的有用方法。

這些命令中最簡單、最直觀的一個可能是 dstat 了。

dtstat

儘管 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 系統效能的有價值的見解,幾乎可以用它靈活而功能強大的命令來代替 vmstatnetstatiostatifstat 等較舊的工具集合,該命令結合了這些舊工具的功能。要深入了解 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   %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

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

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%  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

了解磁碟 I/O

Linux 提供了足夠的命令,可以讓你很好地了解磁碟的工作強度,並幫助你關注潛在的問題或減緩。希望這些命令中的一個可以告訴你何時需要質疑磁碟效能。偶爾使用這些命令將有助於確保當你需要檢查磁碟,特別是忙碌或緩慢的磁碟時可以顯而易見地發現它們。