小技巧:你知道iostat是從哪里得到IO相關(guān)信息的嗎?使用strace命令能跟蹤到答案:
成都創(chuàng)新互聯(lián)長(zhǎng)期為1000+客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為崇信企業(yè)提供專業(yè)的成都網(wǎng)站制作、成都做網(wǎng)站,崇信網(wǎng)站改版等技術(shù)服務(wù)。擁有十年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。shell> strace -eopen iostat open("/proc/diskstats", O_RDONLY)
注:Strace教程:5 simple ways to troubleshoot using Strace
注:關(guān)于diskstats的說明,參見官方文檔(主要是其中的field1 ~ field11部分)。
如果你的操作系統(tǒng)里沒有iostat命令的話,除了從源代碼安裝,還可以使用下面方式:
我最常用的iostat命令格式是:『iostat -dx 1』,意思是每隔一秒顯示一次IO擴(kuò)展信息。
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)啟動(dòng)開始的平均值,后面顯示的是每段時(shí)間間隔里的平均值。
介紹一下相關(guān)參數(shù)的含義:
注:建議對(duì)照源代碼來記憶這些參數(shù)都是如何計(jì)算出來的。
關(guān)于這些參數(shù),相對(duì)重要的是后面幾個(gè),具體來說是:util,svctm,await,avgqu-sz:
util是設(shè)備的利用率。如果它接近100%,通常說明設(shè)備能力趨于飽和(并不絕對(duì))。有時(shí)候會(huì)出現(xiàn)大于100%的情況,這是因?yàn)樽x取數(shù)據(jù)的時(shí)候是非原子操作。
svctm是平均每次請(qǐng)求的服務(wù)時(shí)間。從源代碼里可以看出:(r/s+w/s)*(svctm/1000)=util。舉例子:如果util達(dá)到 100%,那么此時(shí)svctm=1000/(r/s+w/s),假設(shè)IOPS是1000,那么svctm大概在1毫秒左右,如果長(zhǎng)時(shí)間大于這個(gè)數(shù)值,說明 系統(tǒng)出了問題。
await是平均每次請(qǐng)求的等待時(shí)間。這個(gè)時(shí)間包括了隊(duì)列時(shí)間和服務(wù)時(shí)間,也就是說,一般情況下,await大于svctm,它們的差值越小,則說明隊(duì)列時(shí)間越短,反之差值越大,隊(duì)列時(shí)間越長(zhǎng),說明系統(tǒng)出了問題。
avgqu-sz是平均請(qǐng)求隊(duì)列的長(zhǎng)度。毫無疑問,隊(duì)列長(zhǎng)度越短越好。
說明:svctm參數(shù)在未來某個(gè)版本的iostat會(huì)被刪除,官方文檔是這樣描述原因的:
The average service time (svctm field) value is meaningless, as I/O statistics are calculated at block level, and we don’t know when the disk driver starts to process a request. For this reason, this field will be removed in a future sysstat version.
另外,有時(shí)候iostat會(huì)顯示一些很離譜的結(jié)果,官方FAQ給出了如下的解釋:
Because of a Linux kernel bug, iostat -x may display huge I/O response times (svctm) and a bandwidth utilization (%util) of 100% for some devices. Indeed these devices have a value for the field #9 (beginning after the device name) in /proc/{partitions,diskstats} which is always different from 0, and even negative sometimes. Yet this field should go to zero, since it gives the number of I/Os currently in progress (it is incremented as requests are submitted, and decremented as they finish). To (temporarily) solve the problem, you should reboot your system to reset the counters in /proc/{partitions,diskstats}.
如果大家想要更系統(tǒng)的了解關(guān)于IO的相關(guān)知識(shí),可以參考如下資料:
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。