本文介紹如何使用iostat、iotop工具查看I/O負載情況。
查看磁碟I/O負載
使用iostat從系統緯度查看磁碟IO負載
iostat是一款Linux系統中監控I/O效能的工具,可以從系統緯度查看磁碟I/O負載情況。
執行如下命令,安裝iostat。
yum install sysstat
執行如下命令,查看I/O負載。
iostat -d -k 3 5
說明-d:顯示磁碟的使用方式。
-k:以KB為單位顯示。
3:統計時間間隔。
5:統計次數。
顯示結果如下。
顯示結果參數說明如下,更多參數說明,請參見iostat(1) - Linux man page。
Device:磁碟名稱。
tps:每秒鐘發送到的I/O請求數。
Blk_read/s:每秒讀取的block數。
Blk_wrtn/s:每秒寫入的block數。
Blk_read:讀入的block總數。
Blk_wrtn:寫入的block總數。
使用iotop從進程緯度查看磁碟IO負載
iotop是一個用來監視磁碟I/O使用狀況的top類工具,可以從進程緯度查看磁碟IO負載。
執行如下命令,安裝iotop。
yum install iotop
執行如下命令,查看I/O負載。
iotop -k -n 5 -d 3
說明-b:記錄到日誌。
-k:以KB為單位顯示。
-n:統計次數。
-d:統計時間間隔。
顯示結果如下。
顯示結果參數說明如下,更多參數說明,可執行
iotop -h
查詢。DISK READ:該進程讀I/O頻寬。
DISK WRITE:該進程寫I/O頻寬。
SWAPIN:磁碟的交換使用率。
IO:該進程的 I/O 利用率,包含磁碟和交換。
kjournald進程佔用I/O資源高問題
問題描述
使用iotop排查分析,發現kjournald進程佔用了大量I/O資源。
問題原因
該問題通常是由於.ext3
檔案系統設定的Journal size太小導致。
kjournald進程是ext3檔案系統進行I/O資料操作的核心進程,它在向磁碟內寫入和讀取資料時佔用CPU和記憶體資源。當迴圈的向ext3檔案系統寫資料時,會使Journal size不斷增大,到達設定的Journal size時,就會出現該問題。
解決方案
遠端連線Linux系統的ECS執行個體。
具體操作,請參見串連方式概述。
執行如下命令,查看相應分區的Journal size大小。
dumpe2fs /dev/xvda1 | grep Journal
說明/dev/xvda1請替換為實際的分區。
系統顯示類似如下,表示
/dev/xvda1
分區的Journal size為128M。dumpe2fs 1.42.9 (28-Dec-2013) Journal inode: 8 Journal backup: inode blocks Journal features: journal_incompat_revoke Journal size: 128M Journal length: 32768 Journal sequence: 0x00010ffb Journal start: 10953
執行如下命令,修改Journal size大小。
mke2fs -J size=400 /dev/xvda1
說明請根據業務需要,修改size大小,/dev/xvda1請替換為實際的分區。
I/O效能最佳化:通過4K對齊提高I/O效能
4K對齊指將符合4K扇區定義格式化過的硬碟,按照4K扇區的規則寫入資料。4K對齊可以使簇與扇區相對應,保證了磁碟讀寫效率,以提高I/O效能。
本操作介紹如何通過以下指令碼對磁碟進行格式化並自動設定4K對齊。
運行此指令碼會自動格式化所有資料盤,如果非新購資料盤,請在操作前,確認已對相關資料盤進行資料備份。具體操作,請參見建立快照。
使用root使用者遠端連線Linux系統的ECS執行個體。
具體操作,請參見串連方式概述。
下載auto_fdisk.zip壓縮包後解壓,將解壓後指令碼並上傳到目標伺服器。
依次執行如下命令,為指令碼添加執行許可權,然後運行指令碼。
chmod +x ./auto_fdisk.sh ./auto_fdisk.sh