https://blog.csdn.net/u013332124/article/details/98352716
當(dāng)我們要看系統(tǒng)IO情況時,一般最先想到的應(yīng)該就是iostat命令的平匈。iostat提供了豐富的參數(shù)給我們查詢各種維度的io數(shù)據(jù)。學(xué)習(xí)iostat有助于我們排查IO相關(guān)問題時可以更快的定位到問題根源晋修。
以下內(nèi)容大多來自iostat的man文檔,會加上部分自己的理解凰盔,英文水平好的同學(xué)也可以直接看man文檔
一墓卦、命令相關(guān)參數(shù)
命令使用:
iostat [ -c ] [ -d ] [ -N ] [ -n ] [ -h ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [ -y ] [ -z ] [ -j { ID | LABEL | PATH | UUID | ... } [ device [...] | ALL ] ] [ device [...] | ALL ] [ -p [ device [,...] | ALL ] ] [ interval [ count ] ]
看著有點亂,我們可以歸納為:
iostat [-參數(shù)] [指定磁盤] [采集周期頻率] [采集次數(shù)]
比如iostat -k sda 5 2
表示采集sda磁盤上的相關(guān)信息户敬,每5秒采集一次落剪,一共采集2次。-k參數(shù)表示以kb來顯示尿庐。
相關(guān)參數(shù)介紹:
參數(shù) | 詳解 |
---|---|
-c | 只顯示cpu相關(guān)統(tǒng)計信息(默認(rèn)是同時顯示cpu和磁盤信息) |
-d | 只顯示磁盤統(tǒng)計信息(默認(rèn)是同時顯示cpu和磁盤信息) |
-h | 使用NFS的輸出報告更加友好可讀忠怖。NFS通過-n來開啟 |
-j { ID | LABEL | PATH | UUID | ... } | 磁盤列表的Device列要用什么維度來描述磁盤 |
-k | 默認(rèn)情況下,iostat的輸出是以block作為計量單位抄瑟,加上這個參數(shù)可以以kb作為計量單位顯示凡泣。(該參數(shù)僅在linux內(nèi)核版本2.4以后數(shù)據(jù)才是準(zhǔn)確的) |
-m | 默認(rèn)情況下,iostat的輸出是以block作為計量單位,加上這個參數(shù)可以以mb作為計量單位顯示问麸。(該參數(shù)僅在linux內(nèi)核版本2.4以后數(shù)據(jù)才是準(zhǔn)確的) |
-N | 顯示磁盤陣列(LVM) 信息 |
-n | 顯示NFS相關(guān)統(tǒng)計數(shù)據(jù)(network fileSystem)往衷。但是這個參數(shù)只在linux內(nèi)核版本2.6.17之后有用 |
-p [ { device [,...] | ALL } ] | 顯示磁盤分區(qū)的相關(guān)統(tǒng)計信息(默認(rèn)粒度只到磁盤钞翔,沒有顯示具體的邏輯分區(qū)) |
-t | 每次輸出報告時顯示系統(tǒng)時間严卖, |
-V | 顯示當(dāng)前iostat的版本信息 |
-x | 顯示更詳細(xì)的磁盤報告信息,默認(rèn)只顯示六列布轿,加上該參數(shù)后會顯示更詳細(xì)的信息哮笆。這個參數(shù)也需要在內(nèi)核版本2.4之后才能使用 |
-y | 跳過不顯示第一次報告的數(shù)據(jù),因為iostat使用的是采樣統(tǒng)計汰扭,所以iostat的第一次輸出的數(shù)據(jù)是自系統(tǒng)啟動以來累計的數(shù)據(jù) |
-z | 只顯示在采樣周期內(nèi)有活動的磁盤 |
通過uname -a可以查看當(dāng)前l(fā)inux系統(tǒng)的內(nèi)核版本稠肘。2.4版本后一個block的大小通常是512byte
默認(rèn)情況下,第一次的輸出信息的數(shù)據(jù)是從操作系統(tǒng)啟動以來的累計數(shù)據(jù)萝毛,第二次開始才是真正的采樣周期內(nèi)的真實數(shù)據(jù)项阴,這點和top命令很像。我們可以加上-y來過濾掉第一次的輸出信息笆包。
二环揽、輸出信息
iostat的輸出信息主要可以分為3大部分:
- cpu部分的統(tǒng)計信息
- 磁盤相關(guān)的統(tǒng)計信息
- NFS(Network FileSystem)相關(guān)的統(tǒng)計信息
默認(rèn)情況下,iostat只會顯示cpu和磁盤部分的統(tǒng)計信息庵佣。如下圖:
加上-n可以顯示NFS的統(tǒng)計信息歉胶。由于本人在多個系統(tǒng)上測試均沒有具體的數(shù)值輸出,因此下面只介紹cpu和磁盤部分的統(tǒng)計信息巴粪。
1通今、cpu部分的統(tǒng)計
這里的cpu統(tǒng)計信息只是取平均值,如果是多核cpu肛根,想看每核cpu的具體統(tǒng)計信息辫塌,可以使用top命令。
下面的百分比計算一般采用公式: 消耗時間100.0/采樣時間*
- %user: cpu消耗在用戶空間的時間占比
- %nice: 被用戶修改過優(yōu)先級的進(jìn)程運行時間占比
- %system: cpu消耗在內(nèi)核空間的時間占比
- %iowait: cpu在等待IO的時間占比(需要滿足CPU資源空閑而磁盤IO在工作的條件)
- %steal: 當(dāng)hypervisor正服務(wù)于另外一個虛擬處理器時無意識地等待虛擬CPU所占有的時間百分比
- %idle: cpu空閑時間百分比
iowait可以作為磁盤是否是系統(tǒng)瓶頸的參考值派哲,但并不能全信臼氨。iowait表示的含義是cpu沒在工作而在等待io的時間占比,在cpu高速運轉(zhuǎn)的情況下也會出現(xiàn)iowait高的情況狮辽,這并不能表明磁盤性能就有問題一也。唯一能說明磁盤性能差的應(yīng)該是根據(jù)磁盤的read/write時間,一般來說喉脖,一次讀寫就是一次尋道+一次旋轉(zhuǎn)延遲+數(shù)據(jù)傳輸?shù)臅r間∫叮現(xiàn)代硬盤數(shù)據(jù)傳輸就是幾微秒或者幾十微秒的事情,遠(yuǎn)遠(yuǎn)小于尋道時間220ms和旋轉(zhuǎn)延遲48ms树叽,所以只計算這兩個時間就差不多了舆蝴,也就是15~20ms。如果磁盤讀寫時間大于20ms,就要考慮是否是磁盤讀寫太多洁仗,導(dǎo)致磁盤性能降低了层皱。
2、磁盤部分的統(tǒng)計
在沒加-x
參數(shù)時赠潦,默認(rèn)輸出以下六列:
- Device: 磁盤名稱叫胖,可以通過-p參數(shù)改成ID、PATH她奥、UUID的形式
- tps:取樣周期內(nèi)瓮增,磁盤的讀寫次數(shù)。但是由于有時操作系統(tǒng)會合并多個IO請求成一個哩俭,因此這個參數(shù)并不是十分準(zhǔn)確绷跑。
- Blk_read/s:取樣周期內(nèi),每秒讀取的block數(shù)量(通過參數(shù)-k -m可以將單位改成kb凡资、mb)
- Blk_wrtn/s:取樣周期內(nèi)砸捏,每秒寫入的block數(shù)量(通過參數(shù)-k -m可以將單位改成kb、mb)
- Blk_read:取樣周期內(nèi)隙赁,讀取的總block數(shù)量(通過參數(shù)-k -m可以將單位改成kb垦藏、mb)
- Blk_wrtn:取樣周期內(nèi),寫入的總block數(shù)量(通過參數(shù)-k -m可以將單位改成kb鸳谜、mb)
如果加了-x
參數(shù)膝藕,會詳細(xì)更加詳細(xì)的數(shù)據(jù),如下圖:
- rrqm/s:采樣周期內(nèi)咐扭,每秒merge的讀請求數(shù)量
- wrqm/s:采樣周期內(nèi)芭挽,,每秒merge的寫請求數(shù)量
- r/s:采樣周期內(nèi)蝗肪,每秒的讀請求數(shù)量
- w/s:采樣周期內(nèi)袜爪,每秒的寫請求數(shù)量
- rsec/s:采樣周期內(nèi),每秒讀取的扇區(qū)數(shù)量(通過參數(shù)-k -m可以將單位改成kb薛闪、mb)
- wsec/s:采樣周期內(nèi)辛馆,每秒寫入的扇區(qū)數(shù)量(通過參數(shù)-k -m可以將單位改成kb、mb)
- avgrq-sz:采樣周期內(nèi)豁延,平均IO請求的大嘘几荨(以扇區(qū)為單位)
- avgqu-sz:采樣周期內(nèi),平均IO隊列長度(在等待被執(zhí)行的IO請求)
- await:采樣周期內(nèi)诱咏,IO請求的平均時間(排隊時長+IO服務(wù)時長)苔可,單位是毫秒
- svctm:采樣周期內(nèi),IO請求的平均服務(wù)時間袋狞,排除排隊的時長焚辅,單位是毫秒(該統(tǒng)計維度的數(shù)值不可信映屋,后面的iostat版本會移除這項統(tǒng)計值)
- %util:采樣周期內(nèi),IO忙碌的時間百分比同蜻,如果這個值接近100棚点,說明此時IO已經(jīng)滿負(fù)荷了
網(wǎng)上許多博客都說用svctm可以衡量磁盤的性能,但是在iostat的man文檔中有提到湾蔓,讓我們不要相信這個列的輸出值瘫析,并且在后面的版本中會去除這個統(tǒng)計項。
所以要統(tǒng)計磁盤性能卵蛉,綜合來說還是用await列的信息來判斷颁股。一般的磁盤讀寫性能在20ms左右么库,如果await比這個數(shù)值大很多傻丝,就說明當(dāng)前系統(tǒng)存在很大的IO問題。