[Linux] iotop 硬碟IO存取監控指令範例教學


「iotop」是一個用來監控硬碟I/O狀態的工具,它可以協助我們查看目前硬碟的讀寫狀態、哪個程式佔用了大量的I/O資源等,當遇到系統效能低落時,可以透過這個指令來推斷效能差的原因是否來自讀I/O讀寫的問題,或者是由其他因素所造成,對於系統管理者來說,是一款相當不錯的硬碟效能監控的工具之一。

測試OS:Ubuntu 20.04 英文 Server 版

iotop 安裝

請根據自己的OS選擇適合的安裝指令:

CentOS/RHEL

sudo yum install iotop

ubuntu

sudo apt install iotop

常用參數說明

請參考下表說明:

參數 說明
-a 以累計的方式顯示I/O資訊。在這種模式下,顯示從iotop運行後所累積的I/O資料量
-b 切換為批次模式,適合於用來記錄日誌。即非互動式模式
-d 指定每次監控時間的間隔,例如:「-d 3」,預設是1秒,常與「-n」搭配使用
-h 即Help,可以查看iotop的參數用法
-k 以KB為單位來呈現I/O的資料量
-n 指定監控的次數,例如:「-n 3」,預設為無限次,常與「-d」搭配使用
-o 只顯示正在產生I/O的程序或執行緒
-p 指定要監控的程序、執行緒,該參數後面要接ID,例如:「-p 12345」。
-P 呈現產生I/O的程序,而不呈現執行緒的部分
-t 將每一行資訊加上時間戳記,適用於非互動式的模式下
-u 監控指定的使用者所產生I/O資訊,例如:「-u username」
–version 查看iotop的版本

實務範例

請使用「root」權限執行「iotop」指令,避免權限不足

以互動模式呈現I/O資訊

預設就是互動式模式,所以只要輸入「iotop」指令即可

iotop

iotop 互動模式畫面

只呈現正在存取I/O的程序或執行緒

這個範例還蠻實用的,只會呈現目前正在存取I/O的程序或執行緒,這樣就可以有效的過濾掉一些沒有用的資訊

iotop -o

iotop 呈現正在存取I/O的程序

呈現I/O的總累積數據

累計的時間會從執行 iotop 指令的那一刻開始起算,會持續的累積所有程序的I/O讀寫,這樣便可以看出整體的I/O大都是哪個程序或執行緒在使用

iotop -a

iotop累積I/O讀寫數

呈現指定程序之I/O讀寫數據

在參數「-p」後面可以加入程序的ID,這樣畫面就會只呈現該程序的讀寫數據,例如:「iotop -p 5511」,當我們要針對某個程序進行監控時,這個指令就相當有用。另外,如果要用時監控多個程序的話,那麼就用多個「-p」來指定,例如:「iotop -p 5511 -p 12345」即可同時監控程序ID 5511與12345。
註:大多數的情況下執行緒ID(TID)會等於程序ID(PID)

iotop -p 程序ID

iotop指定某程序的I/O

指定更新間隔與次數

藉由參數「-d」、「-n」可以指定數據要更新的間隔與次數,例如:「iotop -d 3 -n 5」代表3秒更新一次數據,總共更新5次,若都不指定的話,則預設是每秒更新一次,無限次持續更新

iotop -d 間隔秒數 -n 更新次數

批次輸出I/O讀寫數據

利用批次模式(-b)可以將數據輸出到檔案中,這可以協助程式開發者或者系統管理者做進行一步的解析或利用,而通常批次模式都會再搭配參數「-t」來替每一行輸出加入時間戳記。在以下的範例中,代表要將目前正使用到I/O資源的程序輸出數據到檔案「demo.log」中,並在每筆輸出的資料上加入時間戳記,每3秒輸出一次,總共輸出5次

iotop -bot -d 3 -n 5 > demo.log

iotop批次模式I/O數據收集

互動模式下不同呈現方式的切換

在互動模式下,可以藉由一些按鍵的操作來進行資訊的切換或篩選,常用的熱鍵如下:

  • 左右方向鍵:可以切換要排序的欄位,選中的會反白(如下圖的第三列),並以該欄位進行排序,以本範例來看會以「IO」這個欄位進行排序
  • r:反向排序
  • o:同指令「-o」,只呈現目前正在存取I/O的程序或執行緒
  • p:以程序(Processes)為主來呈現畫面(即PID),預設是以執行緒為主(Threads,即TID)
  • a:以累計的模式來呈現數據
  • q:退出iotop

iotop批次模式I/O數據收集

延伸閱讀