如何使用iostat查看linux硬盤IO性能
TOP 觀察:IO等待所占用的CPU時(shí)間的百分比,高過(guò)30%時(shí)IO壓力高其次、用iostat -x 1 10
[root@controller ~]#iostat -d -k 1 10 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 19.00 0.00 112.00 0 112 sda1 0.00 0.00 0.00 0 0 sda2 0.00 0.00 0.00 0 0 sda3 0.00 0.00 0.00 0 0 sda4 0.00 0.00 0.00 0 0 sda5 3.00 0.00 16.00 0 16 sda6 0.00 0.00 0.00 0 0 sda7 16.00 0.00 96.00 0 96
tps:該設(shè)備每秒的傳輸次數(shù),一次傳輸?shù)囊馑际恰耙淮蜪/O請(qǐng)求”
- kB_read/s:每秒從設(shè)備讀取的數(shù)據(jù)量
- kB_wrtn/s:每秒向設(shè)備寫入的數(shù)據(jù)量
- kB_read:讀取的總數(shù)據(jù)量
- kB_wrtn :寫入的總數(shù)量數(shù)據(jù)量
使用-x獲得更多信息
使用-x獲得更多信息
查看設(shè)備使用率(%util)、響應(yīng)時(shí)間(await)
[root@controller ~]#iostat -d -x -k 1 10 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util sda 0.00 22.00 0.00 18.00 0.00 160.00 17.78 0.07 3.78 3.78 6.80 sda1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 sda2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 sda3 0.00 15.00 0.00 2.00 0.00 68.00 68.00 0.01 6.50 6.50 1.30 sda4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 sda5 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 sda6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 sda7 0.00 7.00 0.00 16.00 0.00 92.00 11.50 0.06 3.44 3.44 5.50
- rrqm/s:每秒進(jìn)行merge的讀操作數(shù)目。即delta(rmerge)/s
- wrqm/s:每秒進(jìn)行merge的寫操作數(shù)目。即delta(wmerge)/s
- r/s:每秒完成的讀I/O設(shè)備次數(shù)。即delta(rio)/s
- w/s:每秒完成的寫I/O設(shè)備次數(shù)。即delta(wio)/s
- rsec/s:每秒讀扇區(qū)數(shù)。即delta(rsect)/s
- wsec/s:每秒寫扇區(qū)數(shù)。即delta(wsect)/s
- rkB/s:每秒讀K字節(jié)數(shù)。是rsect/s的一半,因?yàn)槊可葏^(qū)大小為512字節(jié)。(需要計(jì)算)
- wkB/s:每秒寫K字節(jié)數(shù)。是wsect/s的一半。(需要計(jì)算)
- avgrq-sz:平均每次設(shè)備I/O操作的數(shù)據(jù)大小(扇區(qū))。delta(rsect+wsect)/delta(rio+wio)
- avgqu-sz:平均I/O隊(duì)列長(zhǎng)度。即delta(aveq)/s/1000(因?yàn)閍veq的單位為毫秒)。
- await:平均每次設(shè)備I/O操作的等待時(shí)間(毫秒)。即delta(ruse+wuse)/delta(rio+wio)
- svctm:平均每次設(shè)備I/O操作的服務(wù)時(shí)間(毫秒)。即delta(use)/delta(rio+wio)
- %util:一秒中有百分之多少的時(shí)間用于I/O操作,或者說(shuō)一秒中有多少時(shí)間I/O隊(duì)列是非空的。即delta(use)/s/1000(因?yàn)閡se的單位為毫秒)
如果%util接近100%,說(shuō)明產(chǎn)生的I/O請(qǐng)求太多,I/O系統(tǒng)已經(jīng)滿負(fù)荷,該磁盤
可能存在瓶頸。
idle小于70%IO壓力就較大了,一般讀取速度有較多的wait.
同時(shí)可以結(jié)合vmstat查看查看b參數(shù)()和wa參數(shù)()
另外還可以參考
svctm 一般要小于await(因?yàn)橥瑫r(shí)等待的請(qǐng)求的等待時(shí)間被重復(fù)計(jì)算了),svctm 的大小一般和磁盤性能有關(guān),CPU/內(nèi)存的負(fù)荷也會(huì)對(duì)其有影響,請(qǐng)求過(guò)多也會(huì)間接導(dǎo)致svctm的增加。await 的大小一般取決于服務(wù)時(shí)間(svctm)以及I/O隊(duì)列的長(zhǎng)度和I/O請(qǐng)求的發(fā)出模式。如果svctm比較接近await,說(shuō)明I/O 幾乎沒(méi)有等待時(shí)間;如果await遠(yuǎn)大于svctm,說(shuō)明I/O 隊(duì)列太長(zhǎng),應(yīng)用得到的響應(yīng)時(shí)間變慢,如果響應(yīng)時(shí)間超過(guò)了用戶可以容許的范圍,這時(shí)可以考慮更換更快的磁盤,調(diào)整內(nèi)核elevator 算法,優(yōu)化應(yīng)用,或者升級(jí)CPU。
隊(duì)列長(zhǎng)度(avgqu-sz)也可作為衡量系統(tǒng)I/O負(fù)荷的指標(biāo),但由于avgqu-sz是按照單位時(shí)間的平均值,所以不能反映瞬間的I/O洪水。
別人一個(gè)不錯(cuò)的例子.(I/O系統(tǒng)vs.超市排隊(duì))
舉 一個(gè)例子,我們?cè)诔信抨?duì)checkout時(shí),怎么決定該去哪個(gè)交款臺(tái)呢?首當(dāng)是看排的隊(duì)人數(shù),5個(gè)人總比20人要快吧? 除了數(shù)人頭,我們也常??纯辞懊嫒速?gòu)買的東西多少,如果前面有個(gè)采購(gòu)了一星期食品的大媽,那么可以考慮換個(gè)隊(duì)排了。還有就是收銀員的速度了,如果碰上了連 錢都點(diǎn)不清楚的新手,那就有的等了。另外,時(shí)機(jī)也很重要,可能5 分鐘前還人滿為患的收款臺(tái),現(xiàn)在已是人去樓空,這時(shí)候交款可是很爽啊,當(dāng)然,前提是那過(guò)去的5分鐘里所做的事情比排隊(duì)要有意義 (不過(guò)我還沒(méi)發(fā)現(xiàn)什么事情比排隊(duì)還無(wú)聊的)。
I/O系統(tǒng)也和超市排隊(duì)有很多類似之處:
- r/s+w/s類似于交款人的總數(shù)
- 平均隊(duì)列長(zhǎng)度(avgqu-sz)類似于單位時(shí)間里平均排隊(duì)人的個(gè)數(shù)
- 平均服務(wù)時(shí)間(svctm)類似于收銀員的收款速度
- 平均等待時(shí)間(await)類似于平均每人的等待時(shí)間
- 平均I/O數(shù)據(jù)(avgrq-sz)類似于平均每人所買的東西多少
- I/O操作率(%util)類似于收款臺(tái)前有人排隊(duì)的時(shí)間比例。
我們可以根據(jù)這些數(shù)據(jù)分析出I/O請(qǐng)求的模式,以及I/O的速度和響應(yīng)時(shí)間。
%util:在統(tǒng)計(jì)時(shí)間內(nèi)所有處理IO時(shí)間,除以總共統(tǒng)計(jì)時(shí)間。例如,如果統(tǒng)計(jì)間隔1秒,該設(shè)備有0.8秒在處理IO,而0.2秒閑置,那么該設(shè)備的%util = 0.8/1 = 80%,所以該參數(shù)暗示了設(shè)備的繁忙程度。一般地,如果該參數(shù)是100%表示設(shè)備已經(jīng)接近滿負(fù)荷運(yùn)行了(當(dāng)然如果是多磁盤,即使%util是100%,因?yàn)榇疟P的并發(fā)能力,所以磁盤使用未必就到了瓶頸)。
)
部署一個(gè)程序時(shí)(我測(cè)試的是一個(gè)實(shí)時(shí)上傳日志的程序),對(duì)系統(tǒng)的cpu、內(nèi)存、io等都要有所考慮,保證系統(tǒng)高效的運(yùn)行。
如果程序本身處理的包特別小,事件很多,壓力大且沒(méi)有間隔的話,占用CPU的資源會(huì)很多
如果用磁盤緩存,不用內(nèi)存緩存的話,能夠支持?jǐn)帱c(diǎn)重傳,保證數(shù)據(jù)的可靠性上傳,如突然斷電等情況,存入磁盤緩存的數(shù)據(jù)等到恢復(fù)后會(huì)依然上傳,而不會(huì)丟失,但是相對(duì)的也會(huì)增加讀寫磁盤的次數(shù),如果數(shù)據(jù)量比較小,速度還是可以忍受的。
下面是別人寫的這個(gè)參數(shù)輸出的分析
# iostat -x 1 avg-cpu: %user %nice %sys %idle 16.24 0.00 4.31 79.44 Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util /dev/cciss/c0d0 0.00 44.90 1.02 27.55 8.16 579.59 4.08 289.80 20.57 22.35 78.21 5.00 14.29 /dev/cciss/c0d0p1 0.00 44.90 1.02 27.55 8.16 579.59 4.08 289.80 20.57 22.35 78.21 5.00 14.29 /dev/cciss/c0d0p2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
上面的iostat輸出表明秒有28.57次設(shè)備I/O操作:總IO(io)/s=r/s(讀)+w/s(寫)=1.02+27.55=28.57(次/秒)其中寫操作占了主體(w:r=27:1)。
平均每次設(shè)備I/O操作只需要5ms就可以完成,但每個(gè)I/O請(qǐng)求卻需要等上78ms,為什么?因?yàn)榘l(fā)出的I/O請(qǐng)求太多(每秒鐘約29個(gè)),假設(shè)這些請(qǐng)求是同時(shí)發(fā)出的,那么平均等待時(shí)間可以這樣計(jì)算:
平均等待時(shí)間=單個(gè)I/O服務(wù)時(shí)間*(1+2+…+請(qǐng)求總數(shù)-1)/請(qǐng)求總數(shù)
應(yīng)用到上面的例子:平均等待時(shí)間=5ms*(1+2+…+28)/29=70ms,和iostat給出的78ms的平均等待時(shí)間很接近。這反過(guò)來(lái)表明I/O是同時(shí)發(fā)起的。
每秒發(fā)出的I/O請(qǐng)求很多(約29個(gè)),平均隊(duì)列卻不長(zhǎng)(只有2個(gè)左右),這表明這29個(gè)請(qǐng)求的到來(lái)并不均勻,大部分時(shí)間I/O是空閑的。
一秒中有14.29%的時(shí)間I/O隊(duì)列中是有請(qǐng)求的,也就是說(shuō),85.71%的時(shí)間里I/O系統(tǒng)無(wú)事可做,所有29個(gè)I/O請(qǐng)求都在142毫秒之內(nèi)處理掉了。
delta(ruse+wuse)/delta(io) =await=78.21=>delta(ruse+wuse)/s=78.21*delta(io)/s= 78.21*28.57=2232.8,表明每秒內(nèi)的I/O請(qǐng)求總共需要等待2232.8ms。所以平均隊(duì)列長(zhǎng)度應(yīng)為 2232.8ms/1000ms=2.23,而iostat給出的平均隊(duì)列長(zhǎng)度(avgqu-sz)卻為22.35,為什么?!因?yàn)?iostat中有bug,avgqu-sz值應(yīng)為2.23,而不是22.35。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
CentOS 6.6服務(wù)器編譯安裝lnmp(Nginx1.6.2+MySQL5.6.21+PHP5.6.3)
這篇文章主要介紹了CentOS 6.6服務(wù)器編譯安裝lnmp(Nginx1.6.2+MySQL5.6.21+PHP5.6.3),需要的朋友可以參考下2016-10-10詳解linux為阿里云ECS(CentOS7)配置IPv6地址
這篇文章主要介紹了詳解linux為阿里云ECS(CentOS7)配置IPv6地址,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04LNMP下安裝Pureftpd開啟FTP服務(wù)以及修改FTP端口的方法
這篇文章主要介紹了LNMP下安裝Pureftpd開啟FTP服務(wù)以及修改FTP端口的方法,需要的朋友可以參考下2016-09-09linux虛擬網(wǎng)絡(luò)設(shè)備之vlan配置詳解
這篇文章主要給大家介紹了關(guān)于linux虛擬網(wǎng)絡(luò)設(shè)備之vlan配置的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-12-12阿里云ECS實(shí)例設(shè)置用戶root密碼和遠(yuǎn)程連接的方法
這篇文章主要介紹了阿里云ECS實(shí)例設(shè)置用戶root密碼和遠(yuǎn)程連接的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07Linux 4.9內(nèi)核正式發(fā)布!來(lái)看看更新了什么?
Linus Torvalds 在 2016年12月11日發(fā)布了Linux內(nèi)核4.9的正式版本,這次主要帶來(lái)了一些新的功能和一些驅(qū)動(dòng)更新,當(dāng)然,還有一些底層的改進(jìn)。想要看看詳細(xì)的介紹,下面來(lái)通過(guò)這篇文章來(lái)一起看看吧。2016-12-12