你知道在 Linux 中我們使用什麼工具檢修和監控實時的磁碟活動嗎?如果 Linux 系統效能變慢,我們會用 top 命令 來檢視系統效能。它被用來檢查是什麼行程在伺服器上佔有如此高的使用率,對於大多數 Linux 系統管理員來說很常見,現實世界中被 Linux 系統管理員廣泛採用。
如果在行程輸出中你沒有看到很大的不同,你仍然有選擇檢視其他東西。我會建議你在 top 輸出中檢查 wa
狀態,因為大多數時間裡伺服器效能由於在硬碟上的高 I/O 讀和寫降低了效能。如果它很高或者波動,很可能就是它造成的。因此,我們需要檢查硬碟上的 I/O 活動。
我們可以在 Linux 中使用 iotop 和 iostat 命令監控所有的磁碟和檔案系統的磁碟 I/O 統計。
什麼是 iotop?
iotop 是一個類似 top 的工具,用來顯示實時的磁碟活動。
iotop 監控 Linux 核心輸出的 I/O 使用資訊,並且顯示一個系統中行程或執行緒的當前 I/O 使用情況。
它顯示每個行程/執行緒讀寫 I/O 頻寬。它同樣顯示當等待換入和等待 I/O 的執行緒/行程花費的時間的百分比。
Total DISK READ
和 Total DISK WRITE
的值一方面表示了行程和核心執行緒之間的總的讀寫頻寬,另一方面也表示核心塊裝置子系統的。
Actual DISK READ
和 Actual DISK WRITE
的值表示在核心塊裝置子系統和下麵硬體(HDD、SSD 等等)對應的實際磁碟 I/O 頻寬。
如何在 Linux 中安裝 iotop ?
我們可以輕鬆在包管理器的幫助下安裝,因為該軟體包在所有的 Linux 發行版倉庫中都可以獲得。
對於 Fedora 系統,使用 DNF 命令 來安裝 iotop。
-
$ sudo dnf install iotop
對於 Debian/Ubuntu 系統,使用 API-GET 命令 或者 APT 命令 來安裝 iotop。
-
$ sudo apt install iotop
對於基於 Arch Linux 的系統,使用 Pacman Command 來安裝 iotop。
-
$ sudo pacman -S iotop
對於 RHEL/CentOS 的系統,使用 YUM Command 來安裝 iotop。
-
$ sudo yum install iotop
對於使用 openSUSE Leap 的系統,使用 Zypper Command 來安裝 iotop。
-
$ sudo zypper install iotop
在 Linux 中如何使用 iotop 命令來監控磁碟 I/O 活動/統計?
iotop 命令有很多引數來檢查關於磁碟 I/O 的變化:
-
# iotop
10
如果你想檢查那個行程實際在做 I/O,那麼執行 iotop 命令加上 -o
或者 --only
引數。
-
# iotop --only
11
細節:
IO
:它顯示每個行程的 I/O 利用率,包含磁碟和交換。SWAPIN
: 它只顯示每個行程的交換使用率。什麼是 iostat?
iostat 被用來報告中央處理單元(CPU)的統計和裝置與分割槽的輸出/輸出的統計。
iostat 命令透過觀察與它們平均傳輸率相關的裝置活躍時間來監控系統輸入/輸出裝置負載。
iostat 命令生成的報告可以被用來改變系統配置來更好的平衡物理磁碟之間的輸入/輸出負載。
所有的統計都在 iostat 命令每次執行時被報告。該報告包含一個 CPU 頭部,後面是一行 CPU 統計。
在多處理器系統中,CPU 統計被計算為系統層面的所有處理器的平均值。裝置頭行後緊跟顯示每個配置的裝置一行的統計。
iostat 命令生成兩種型別的報告,CPU 利用率報告和裝置利用率報告。
在 Linux 中怎樣安裝 iostat?
iostat 工具是 sysstat
包的一部分,所以我們可以輕鬆地在包管理器地幫助下安裝,因為在所有的 Linux 發行版的倉庫都是可以獲得的。
對於 Fedora 系統,使用 DNF Command 來安裝 sysstat
。
-
$ sudo dnf install sysstat
對於 Debian/Ubuntu 系統,使用 APT-GET Command 或者 APT Command 來安裝 sysstat
。
-
$ sudo apt install sysstat
對於基於 Arch Linux 的系統,使用 Pacman Command 來安裝 sysstat
。
-
$ sudo pacman -S sysstat
對於 RHEL/CentOS 系統,使用 YUM Command 來安裝 sysstat
。
-
$ sudo yum install sysstat
對於 openSUSE Leap 系統,使用 Zypper Command 來安裝 sysstat
。
-
$ sudo zypper install sysstat
在 Linux 中如何使用 sysstat 命令監控磁碟 I/O 活動/統計?
在 iostat 命令中有很多引數來檢查關於 I/O 和 CPU 的變化統計資訊。
不加引數執行 iostat 命令會看到完整的系統統計。
-
# iostat
-
-
Linux 4.19.32-1-MANJARO (daygeek-Y700) Thursday 18 April 2019 _x86_64_ (8 CPU)
-
-
avg-cpu: %user %nice %system %iowait %steal %idle
-
29.45 0.02 16.47 0.12 0.00 53.94
-
-
Device tps kB_read/s kB_wrtn/s kB_dscd/s kB_read kB_wrtn kB_dscd
-
nvme0n1 6.68 126.95 124.97 0.00 58420014 57507206 0
-
sda 0.18 6.77 80.24 0.00 3115036 36924764 0
-
loop0 0.00 0.00 0.00 0.00 2160 0 0
-
loop1 0.00 0.00 0.00 0.00 1093 0 0
-
loop2 0.00 0.00 0.00 0.00 1077 0 0
執行 iostat 命令加上 -d
引數檢視所有裝置的 I/O 統計。
-
# iostat -d
-
-
Linux 4.19.32-1-MANJARO (daygeek-Y700) Thursday 18 April 2019 _x86_64_ (8 CPU)
-
-
Device tps kB_read/s kB_wrtn/s kB_dscd/s kB_read kB_wrtn kB_dscd
-
nvme0n1 6.68 126.95 124.97 0.00 58420030 57509090 0
-
sda 0.18 6.77 80.24 0.00 3115292 36924764 0
-
loop0 0.00 0.00 0.00 0.00 2160 0 0
-
loop1 0.00 0.00 0.00 0.00 1093 0 0
-
loop2 0.00 0.00 0.00 0.00 1077 0 0
執行 iostat 命令加上 -p
引數檢視所有的裝置和分割槽的 I/O 統計。
-
# iostat -p
-
-
Linux 4.19.32-1-MANJARO (daygeek-Y700) Thursday 18 April 2019 _x86_64_ (8 CPU)
-
-
avg-cpu: %user %nice %system %iowait %steal %idle
-
29.42 0.02 16.45 0.12 0.00 53.99
-
-
Device tps kB_read/s kB_wrtn/s kB_dscd/s kB_read kB_wrtn kB_dscd
-
nvme0n1 6.68 126.94 124.96 0.00 58420062 57512278 0
-
nvme0n1p1 6.40 124.46 118.36 0.00 57279753 54474898 0
-
nvme0n1p2 0.27 2.47 6.60 0.00 1138069 3037380 0
-
sda 0.18 6.77 80.23 0.00 3116060 36924764 0
-
sda1 0.00 0.01 0.00 0.00 3224 0 0
-
sda2 0.18 6.76 80.23 0.00 3111508 36924764 0
-
loop0 0.00 0.00 0.00 0.00 2160 0 0
-
loop1 0.00 0.00 0.00 0.00 1093 0 0
-
loop2 0.00 0.00 0.00 0.00 1077 0 0
執行 iostat 命令加上 -x
引數顯示所有裝置的詳細的 I/O 統計資訊。
-
# iostat -x
-
-
Linux 4.19.32-1-MANJARO (daygeek-Y700) Thursday 18 April 2019 _x86_64_ (8 CPU)
-
-
avg-cpu: %user %nice %system %iowait %steal %idle
-
29.41 0.02 16.45 0.12 0.00 54.00
-
-
Device r/s rkB/s rrqm/s %rrqm r_await rareq-sz w/s wkB/s wrqm/s %wrqm w_await wareq-sz d/s dkB/s drqm/s %drqm d_await dareq-sz aqu-sz %util
-
nvme0n1 2.45 126.93 0.60 19.74 0.40 51.74 4.23 124.96 5.12 54.76 3.16 29.54 0.00 0.00 0.00 0.00 0.00 0.00 0.31 30.28
-
sda 0.06 6.77 0.00 0.00 8.34 119.20 0.12 80.23 19.94 99.40 31.84 670.73 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.13
-
loop0 0.00 0.00 0.00 0.00 0.08 19.64 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
-
loop1 0.00 0.00 0.00 0.00 0.40 12.86 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
-
loop2 0.00 0.00 0.00 0.00 0.38 19.58 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
執行 iostat 命令加上 -d [裝置名]
引數檢視具體裝置和它的分割槽的 I/O 統計資訊。
-
# iostat -p [Device_Name]
-
-
# iostat -p sda
-
-
Linux 4.19.32-1-MANJARO (daygeek-Y700) Thursday 18 April 2019 _x86_64_ (8 CPU)
-
-
avg-cpu: %user %nice %system %iowait %steal %idle
-
29.38 0.02 16.43 0.12 0.00 54.05
-
-
Device tps kB_read/s kB_wrtn/s kB_dscd/s kB_read kB_wrtn kB_dscd
-
sda 0.18 6.77 80.21 0.00 3117468 36924764 0
-
sda2 0.18 6.76 80.21 0.00 3112916 36924764 0
-
sda1 0.00 0.01 0.00 0.00 3224 0 0
執行 iostat 命令加上 -m
引數以 MB 為單位而不是 KB 檢視所有裝置的統計。預設以 KB 顯示輸出。
-
# iostat -m
-
-
Linux 4.19.32-1-MANJARO (daygeek-Y700) Thursday 18 April 2019 _x86_64_ (8 CPU)
-
-
avg-cpu: %user %nice %system %iowait %steal %idle
-
29.36 0.02 16.41 0.12 0.00 54.09
-
-
Device tps MB_read/s MB_wrtn/s MB_dscd/s MB_read MB_wrtn MB_dscd
-
nvme0n1 6.68 0.12 0.12 0.00 57050 56176 0
-
sda 0.18 0.01 0.08 0.00 3045 36059 0
-
loop0 0.00 0.00 0.00 0.00 2 0 0
-
loop1 0.00 0.00 0.00 0.00 1 0 0
-
loop2 0.00 0.00 0.00 0.00 1 0 0
執行 iostat 命令使用特定的間隔使用如下的格式。在這個例子中,我們打算以 5 秒捕獲的間隔捕獲兩個報告。
-
# iostat [Interval] [Number Of Reports]
-
-
# iostat 5 2
-
-
Linux 4.19.32-1-MANJARO (daygeek-Y700) Thursday 18 April 2019 _x86_64_ (8 CPU)
-
-
avg-cpu: %user %nice %system %iowait %steal %idle
-
29.35 0.02 16.41 0.12 0.00 54.10
-
-
Device tps kB_read/s kB_wrtn/s kB_dscd/s kB_read kB_wrtn kB_dscd
-
nvme0n1 6.68 126.89 124.95 0.00 58420116 57525344 0
-
sda 0.18 6.77 80.20 0.00 3118492 36924764 0
-
loop0 0.00 0.00 0.00 0.00 2160 0 0
-
loop1 0.00 0.00 0.00 0.00 1093 0 0
-
loop2 0.00 0.00 0.00 0.00 1077 0 0
-
-
avg-cpu: %user %nice %system %iowait %steal %idle
-
3.71 0.00 2.51 0.05 0.00 93.73
-
-
Device tps kB_read/s kB_wrtn/s kB_dscd/s kB_read kB_wrtn kB_dscd
-
nvme0n1 19.00 0.20 311.40 0.00 1 1557 0
-
sda 0.20 25.60 0.00 0.00 128 0 0
-
loop0 0.00 0.00 0.00 0.00 0 0 0
-
loop1 0.00 0.00 0.00 0.00 0 0 0
-
loop2 0.00 0.00 0.00 0.00 0 0 0
執行 iostat 命令與 -N
引數來檢視 LVM 磁碟 I/O 統計報告。
-
# iostat -N
-
-
Linux 4.15.0-47-generic (Ubuntu18.2daygeek.com) Thursday 18 April 2019 _x86_64_ (2 CPU)
-
-
avg-cpu: %user %nice %system %iowait %steal %idle
-
0.38 0.07 0.18 0.26 0.00 99.12
-
-
Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
-
sda 3.60 57.07 69.06 968729 1172340
-
sdb 0.02 0.33 0.00 5680 0
-
sdc 0.01 0.12 0.00 2108 0
-
2g-2gvol1 0.00 0.07 0.00 1204 0
執行 nfsiostat
命令來檢視 Network File System(NFS)的 I/O 統計。
-
# nfsiostat
朋友會在“發現-看一看”看到你“在看”的內容