iostat 與 iotop:磁碟 I/O 效能監控
在 Linux 系統效能調校中,磁碟 I/O 往往是瓶頸所在。當系統出現回應遲緩、資料庫查詢變慢或檔案讀寫異常時,我們需要精準的工具來定位問題。iostat 與 iotop 是兩大核心監控工具,前者提供歷史統計數據,後者則能即時追蹤進程行為。本文將深入解析這兩款工具的用法與實戰應用。
iostat:歷史趨勢與整體概況
iostat 屬於 sysstat 套件,主要用於監控 CPU 和磁碟 I/O 的統計數據。它適合用於分析一段時間內的平均負載與趨勢。
首先,確保系統已安裝該工具:
sudo apt update
sudo apt install sysstat
基礎用法與選項解析
最常見的用法是即時監控磁碟活動。使用 -d 參數隱藏 CPU 資訊,僅顯示磁碟 I/O;-x 則顯示擴展統計數據,包含更詳細的佇列與利用率資訊。
# 每 2 秒更新一次,顯示擴展磁碟 I/O 統計
iostat -dx 2
輸出範例與解析:
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 f/s f_await aqu-sz %util
sda 10.00 240.00 0.00 0.00 2.00 24.00 5.00 100.00 0.00 0.00 5.00 20.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.02 5.00
sdb 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 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
%util:最關鍵的指標。代表磁碟在統計週期內處於活躍狀態(處理 I/O 請求)的時間百分比。若此值接近或達到 100%,表示磁碟已成為瓶頸。await:I/O 請求從提交到完成所需的平均時間(毫秒)。包含服務時間與佇列等待時間。數值越高,表示延遲越嚴重。r_await/w_await:分別讀取與寫入的平均延遲。
iotop:即時進程級 I/O 追蹤
當 iostat 告訴我們「磁碟很忙」,但沒告訴我們「誰在忙」時,就需要 iotop。它能顯示哪些進程正在進行磁碟讀寫,類似 top 命令對 CPU 的監控方式。
安裝方式如下:
sudo apt install iotop
實戰監控範例
由於 iotop 需要 root 權限才能顯示所有進程的完整資訊,請使用 sudo 執行。
# 每 1 秒更新一次,並隱藏非 I/O 進程
sudo iotop -o -d 1
選項說明:
-o或--only:僅顯示目前進行 I/O 操作的進程,減少雜訊。-d:更新頻率(秒)。
輸出範例:
Total DISK READ : 0.00 B/s | Total DISK WRITE : 8.42 M/s
Actual DISK READ: 0.00 B/s | Actual DISK WRITE : 8.42 M/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND
1234 be/4 root 0.00 B/s 8.42 M/s 0.00 % 15.00 % [kworker/u8:2]
567 be/4 mysql 4.21 M/s 4.21 M/s 0.00 % 5.00 % mysqld --daemon
在此範例中,我們可以清楚看到 mysqld 進程正在進行大量的讀寫操作,這可能是導致系統磁碟負載高的主要原因。
常見問題與解決方案
1. iostat 顯示的 I/O 數據與實際感受不符?
iostat 預設顯示的是「平均」數據。如果磁碟負載是瞬間突發的,平均值可能會掩蓋峰值。建議結合 sar 工具查看歷史記錄,或使用 iostat -dx 1 提高採樣頻率。此外,注意區分 await 與 %util:若 %util 低但 await 高,可能表示 I/O 佇列稀疏但每次請求處理時間長,常見於 SSD 或網路儲存設備。
2. iotop 無法顯示某些進程的 I/O 數據?
這通常與 Linux 核心的 iotop 支援性及權限有關。確保核心版本支援 taskstats(Linux 2.6.20+ 皆支援)。若仍無法顯示,請檢查是否已以 root 權限執行,並確認 /proc 檔案系統已正確掛載。在某些容器環境(如 Docker)中,若未傳遞 SYS_PTRACE 能力,iotop 可能無法監控其他進程。
小結
iostat 適合用於宏觀層面的磁碟健康檢查與趨勢分析,特別是在排查長期效能衰退時發揮重要作用;而 iotop 則擅長微觀層面的即時除錯,能快速鎖定 culprit 進程。在實際运维中,建議兩者搭配使用:先用 iostat 確認磁碟是否為瓶頸,再用 iotop 找出罪魁禍首的應用程式,從而進行精準的優化或擴容。