2013-03-21

iotop - 監看每支程式讀寫硬碟的情形

阿舍之前有介紹過用 NetHogs 來檢查每支在跑的程式各使用了多少的頻寬,這是 Server 端比較會用到的工具,而這次阿舍要介紹的,是個人電腦比較會用到的東西,就是用來查看看,是誰一直、一直在讀寫硬碟哩 ! 阿舍會用到這種工具的情況,就是當電腦沒在做什麼事的時候,硬碟的燈還一直的給它亮著或是閃不停的時候哩 !

iotop 的執行畫面

阿舍在網路上找到有幾支程式可用,阿舍大概的比較了一下,最後選了這個 iotop 來用,阿舍選 iotop 是因為它很簡單易用和易看,用法和 top 指令很像,而且,在 Ubuntu 內建的 PPA 就有放 iotop,所以,只要用下面這一行的 apt-get 指令來安裝就可以了。

sudo apt-get install iotop

在安裝好之後,只要用下面這一行來啟動就可以了,要注意的是,一定要用 sudo 來執行,否則,會因為權限問題而出現錯誤訊息的,iotop 啟動後的顯示畫面和 top 指令幾乎是一模一樣的,最大的差別是在畫面中間的那二行是顯示該程式每秒讀 (DISK READ) 和寫 (DISK WRITE) 硬碟的量,而不是顯示記憶體的使用資訊。

sudo iotop

如果想要顯示成累計讀寫硬碟的資料量的話,就需要像下面這行一樣,在 iotop 指令後面加上  「-a 」選項。

sudo iotop -a

除了「-a」選項之外,iotop 還有幾個阿舍覺得比較實用的選項,所以,就來說明一下,下面就是這幾個選項的用法及用途,而要說明的是,這下面這幾個選項和前面提到的「-a」選項都是可以合併使用的,不需要一次只能使用一個選項哩 !

sudo iotop -o

如果加了「-o」選項,那麼 iotop 就只會顯示正在讀寫硬碟的程式,如果沒有程式在讀寫的話,就不會出現任何的程式哩 !

sudo iotop -d 10

「-d」 選項是用來設定 iotop 更新的頻率,預設是 1 秒鐘,如果要改成 10 秒更新一次的話,就要用上面這一行指令來調整。

sudo iotop -p 3093

如果想要只針對某一支正在執行中的程式來監看的話,那麼就會需要用「-p」選項加上要監看的程式的 PID,這樣 iotop 就只會出現這個 PID 的硬碟讀取情形哩 !

sudo iotop -u arthuryu

用「-p」選項可以監看特定程式,而使用「-u」選項的話,則是可以監看特定使用者所啟動的程式對硬碟的讀取情形,但是,和「-p」選項不同的是,「-u」選項後面要帶入的曞人使用者的帳號名稱而不是代碼哩 !

最後,阿舍要說明的是 iotop 的批次模式 (batch),iotop 的批次模式會將程式讀寫硬碟的資料依序送到指定的輸出裝置,所以,批次模式適合用來將 iotop 所產出的結果寫到檔案來供程式或處理時使用,而要啟用批次模式的話,需要使用「-b」選項,然後,可以搭配「-t」選項來要求在產出的資料上,加註日期和時間,同時,也能使用「-n」選項來要求產出幾次資料後停止哩 !

舉例來說,如果要讓 iotop 以批次方式產出三次資料到 io.log 檔案,然後,只產出正在讀取硬碟中的程式,並且,在產出的資料上加時間的話,那麼 iotop 就要用下一面這一行的方式來執行哩 !

sudo iotop -bot -n 3 > io.log

參考資料

推薦閱讀


有疑問? 問題還是沒解決嗎? 歡迎下方留言提問和討論 😁

4 則留言 :

arguskao 提到...

請問server上也可以用嗎?我的主機固定會有很大量的I/O 忽然出現,可以用這個來監督嗎?

arguskao 提到...

請問如果要記錄 某一段時間,例如晚上12:00-1:00 之間的硬碟使用情況呢?指令應該怎麼下,我是用linode vps,謝謝!

Arthur Yu 提到...

Hello,

建議利用 Cron 排程,搭配 iotop 的批次功能(上文最後一行指令),應該就可以了哩 !

供參囉 !! ^^=

arguskao 提到...

sudo iotop -bot -n 3 > io.log

不好意思,這段我看不懂
我想監測24小時來抓看看
可以一直常駐嗎?
指令該怎麼改?

張貼留言

歡迎留言提問和討論 .... 😁