要監(jiān)控linux磁盤i/o性能,應(yīng)使用iotop和iostat工具分別從進(jìn)程級別和設(shè)備級別進(jìn)行分析。一、使用iotop可查看哪些進(jìn)程頻繁讀寫磁盤,重點關(guān)注disk write和io>列,按o鍵過濾無i/o活動的進(jìn)程;二、使用iostat監(jiān)控設(shè)備級性能,關(guān)注%util(超過80%可能為瓶頸)、await(數(shù)值高表示響應(yīng)慢)等指標(biāo),若%util接近100%,結(jié)合iotop排查具體進(jìn)程;三、應(yīng)對建議:突發(fā)i/o高峰可檢查定時任務(wù),長期高負(fù)載需優(yōu)化程序或升級硬件,i/o等待高但吞吐小則檢查磁盤性能或碎片問題。
監(jiān)控linux磁盤I/O性能,關(guān)鍵在于找出哪個進(jìn)程在頻繁讀寫磁盤,以及磁盤本身的負(fù)載情況。iotop 和 iostat 是兩個非常實用的工具,分別從進(jìn)程級別和設(shè)備級別的角度來觀察I/O行為。
一、用 iotop 查看進(jìn)程級I/O占用
如果你想知道當(dāng)前系統(tǒng)中哪些進(jìn)程正在大量讀寫磁盤,iotop 是個不錯的選擇。它類似于 top 命令,但專注于I/O操作。
進(jìn)入界面后,你會看到類似下面的信息:
TID | PRIO | USER | DISK READ | DISK WRITE | SWAPIN | IO> | COMMAND |
---|---|---|---|---|---|---|---|
1234 | be/4 | www-data | 0.00 B/s | 5.23 M/s | 0.00 % | 0.00 % | nginx: worker |
重點關(guān)注 DISK WRITE 和 IO> 這兩列。如果某個進(jìn)程持續(xù)占用較高的I/O帶寬,說明它可能是性能瓶頸的來源。
? 提示:按 o 鍵可以只顯示有實際I/O活動的進(jìn)程,方便快速定位問題。
二、用 iostat 監(jiān)控設(shè)備級I/O性能
當(dāng)你更關(guān)心磁盤設(shè)備本身的性能表現(xiàn)時,iostat 就派上用場了。它可以展示CPU使用率和磁盤I/O統(tǒng)計信息。
-
安裝方法(iostat包含在sysstat包中):
sudo apt install sysstat
-
常用命令:
iostat -x 1 5
表示每秒刷新一次,共刷新5次。
輸出示例:
Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 23.00 120.00 340.00 600000 1700000
關(guān)鍵指標(biāo)解釋:
- %util:設(shè)備利用率,超過80%可能表示I/O瓶頸。
- await:平均每次I/O請求的等待時間(毫秒),數(shù)值高說明響應(yīng)慢。
- svctm:實際服務(wù)時間,理想情況下應(yīng)遠(yuǎn)小于 await。
? 如果你發(fā)現(xiàn)某塊磁盤的 %util 持續(xù)接近100%,那就要檢查是哪個進(jìn)程在頻繁訪問它,這時候可以結(jié)合前面提到的 iotop 來進(jìn)一步排查。
三、常見場景與應(yīng)對建議
-
突發(fā)性I/O高峰
- 現(xiàn)象:iostat 中磁盤 util 突然飆高,系統(tǒng)響應(yīng)變慢。
- 應(yīng)對:用 iotop 找出具體進(jìn)程,查看是否為備份、日志滾動等定時任務(wù)引起。
-
長期高I/O負(fù)載
- 現(xiàn)象:磁盤 util 長時間高于70%以上。
- 應(yīng)對:考慮優(yōu)化程序邏輯,減少不必要的磁盤讀寫;或升級存儲硬件(如換成SSD)。
-
I/O等待過高但吞吐不大
- 現(xiàn)象:await 高但 kB_read/s 或 kB_wrtn/s 不大。
- 應(yīng)對:可能是磁盤性能本身有問題,或者文件系統(tǒng)碎片多,需要做fsck或更換硬盤。
基本上就這些。掌握好 iotop 和 iostat 的使用,能幫助你快速定位Linux系統(tǒng)的I/O性能問題。不復(fù)雜但容易忽略的是,要根據(jù)具體場景靈活搭配這兩個工具,才能看得更清楚。