「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
只呈現正在存取I/O的程序或執行緒
這個範例還蠻實用的,只會呈現目前正在存取I/O的程序或執行緒,這樣就可以有效的過濾掉一些沒有用的資訊
iotop -o
呈現I/O的總累積數據
累計的時間會從執行 iotop 指令的那一刻開始起算,會持續的累積所有程序的I/O讀寫,這樣便可以看出整體的I/O大都是哪個程序或執行緒在使用
iotop -a
呈現指定程序之I/O讀寫數據
在參數「-p」後面可以加入程序的ID,這樣畫面就會只呈現該程序的讀寫數據,例如:「iotop -p 5511」,當我們要針對某個程序進行監控時,這個指令就相當有用。另外,如果要用時監控多個程序的話,那麼就用多個「-p」來指定,例如:「iotop -p 5511 -p 12345」即可同時監控程序ID 5511與12345。
註:大多數的情況下執行緒ID(TID)會等於程序ID(PID)
iotop -p 程序ID
指定更新間隔與次數
藉由參數「-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
互動模式下不同呈現方式的切換
在互動模式下,可以藉由一些按鍵的操作來進行資訊的切換或篩選,常用的熱鍵如下:
- 左右方向鍵:可以切換要排序的欄位,選中的會反白(如下圖的第三列),並以該欄位進行排序,以本範例來看會以「IO」這個欄位進行排序
- r:反向排序
- o:同指令「-o」,只呈現目前正在存取I/O的程序或執行緒
- p:以程序(Processes)為主來呈現畫面(即PID),預設是以執行緒為主(Threads,即TID)
- a:以累計的模式來呈現數據
- q:退出iotop