詳解iostat -dx 1命令監(jiān)控IO性能
網(wǎng)站的很多性能問題最終都會歸結(jié)到IO頭上,所以說理解iostat命令是非常有必要的。
小技巧:你知道iostat是從哪里得到IO相關(guān)信息的嗎?使用strace命令能跟蹤到答案:
shell> strace -eopen iostat open("/proc/diskstats", O_RDONLY)
注:關(guān)于diskstats的說明,參見官方文檔(field1 ~ field11)。
我最常用的iostat命令格式是:『iostat -dx 1』,意思是每隔一秒顯示一次IO擴展信息。
shell> iostat -dx 1 Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s sda 0.18 37.71 0.65 2.63 50.18 322.08 avgrq-sz avgqu-sz await svctm %util 113.46 0.35 107.49 1.67 0.55 Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s sda 0.00 4208.00 0.00 165.00 0.00 163872.00 avgrq-sz avgqu-sz await svctm %util 993.16 119.54 1144.36 6.07 100.10
注:開頭顯示的是自系統(tǒng)啟動開始的平均值,后面顯示的是每段時間間隔里的平均值。
如果你的操作系統(tǒng)里沒有iostat命令的話,除了從源代碼安裝,還可以使用下面方式:
- Centos/Fedora的安裝方式是:yum install sysstat
- Debian/Ubuntu的安裝方式是:aptitude install sysstat
介紹一下相關(guān)參數(shù)的含義:
- rrqm/s:隊列中每秒鐘合并的讀請求數(shù)量
- wrqm/s:隊列中每秒鐘合并的寫請求數(shù)量
- r/s:每秒鐘完成的讀請求數(shù)量
- w/s:每秒鐘完成的寫請求數(shù)量
- rsec/s:每秒鐘讀取的扇區(qū)數(shù)量
- wsec/s:每秒鐘寫入的扇區(qū)數(shù)量
- avgrq-sz:平均請求數(shù)據(jù)的大小
- avgqu-sz:平均請求隊列的長度
- await:平均每次請求的等待時間
- svctm:平均每次請求的服務(wù)時間
- util:設(shè)備的利用率
注:建議對照源代碼來記憶這些參數(shù)都是如何計算出來的。
關(guān)于這些參數(shù),相對重要的是后面幾個,具體來說是:util,svctm,await,avgqu-sz:
util是設(shè)備的利用率。如果它接近100%,通常說明設(shè)備能力趨于飽和(并不絕對,比如設(shè)備有寫緩存)。有時候可能會出現(xiàn)大于100%的情況,這多半是計算時四舍五入引起的,但如果是磁盤陣列等多盤系統(tǒng),因為具有并發(fā)IO操作的能力,也會出現(xiàn)大于100%的情況。
svctm是平均每次請求的服務(wù)時間。從源代碼里可以看出:(r/s+w/s)*(svctm/1000)=util。舉例子:如果util達(dá)到100%,那么此時svctm=1000/(r/s+w/s),假設(shè)IOPS是1000,那么svctm大概在1毫秒左右,如果長時間大于這個數(shù)值,說明系統(tǒng)出了問題。不過前面已經(jīng)說過在磁盤陣列等多盤系統(tǒng)中util可能出現(xiàn)偏大的情況,所以svctm相應(yīng)的也可能偏大。
await是平均每次請求的等待時間。這個時間包括了隊列時間和服務(wù)時間,也就是說,一般情況下,await大于svctm,它們的差值越小,則說明隊列時間越短,反之差值越大,隊列時間越長,說明系統(tǒng)出了問題。
avgqu-sz是平均請求隊列的長度。毫無疑問,隊列長度越短越好。
說明:svctm參數(shù)在未來某個版本的iostat會被刪除,詳見官方文檔。
另外,有時候iostat會顯示一些很離譜的結(jié)果,具體原因詳見官方FAQ給出的解釋。
原文:http://huoding.com/2011/07/13/91
【編輯推薦】