使用iostat分析IO性能
使用iostat分析IO性能
對(duì)于I/O-bond類(lèi)型的進(jìn)程,我們經(jīng)常用iostat工具查看進(jìn)程IO請(qǐng)求下發(fā)的數(shù)量、系統(tǒng)處理IO請(qǐng)求的耗時(shí),進(jìn)而分析進(jìn)程與操作系統(tǒng)的交互過(guò)程中IO方面是否存在瓶頸。
下面通過(guò)iostat命令使用實(shí)例,說(shuō)明使用iostat查看IO請(qǐng)求下發(fā)情況、系統(tǒng)IO處理能力的方法,以及命令執(zhí)行結(jié)果中各字段的含義。
1.不加選項(xiàng)執(zhí)行iostat
我們先來(lái)看直接執(zhí)行iostat的輸出結(jié)果:
linux # iostat Linux 2.6.16.60-0.21-smp (linux) 06/12/12avg-cpu: %user %nice %system %iowait %steal %idle0.070.000.050.060.0099.81Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 0.589.9537.47673700625377400 sdb 0.000.000.008240單獨(dú)執(zhí)行iostat,顯示的結(jié)果為從系統(tǒng)開(kāi)機(jī)到當(dāng)前執(zhí)行時(shí)刻的統(tǒng)計(jì)信息。以上輸出中,除最上面指示系統(tǒng)版本、主機(jī)名和日期的一行外,另有兩部分:
avg-cpu: 總體cpu使用情況統(tǒng)計(jì)信息,對(duì)于多核cpu,這里為所有cpu的平均值
Device: 各磁盤(pán)設(shè)備的IO統(tǒng)計(jì)信息
對(duì)于cpu統(tǒng)計(jì)信息一行,我們主要看iowait的值,它指示cpu用于等待io請(qǐng)求完成的時(shí)間。Device中各列含義如下:
Device: 以sdX形式顯示的設(shè)備名稱(chēng)
tps: 每秒進(jìn)程下發(fā)的IO讀、寫(xiě)請(qǐng)求數(shù)量
Blk_read/s: 每秒讀扇區(qū)數(shù)量(一扇區(qū)為512bytes)
Blk_wrtn/s: 每秒寫(xiě)扇區(qū)數(shù)量
Blk_read: 取樣時(shí)間間隔內(nèi)讀扇區(qū)總數(shù)量
Blk_wrtn: 取樣時(shí)間間隔內(nèi)寫(xiě)扇區(qū)總數(shù)量
我們可以使用-c選項(xiàng)單獨(dú)顯示avg-cpu部分的結(jié)果,使用-d選項(xiàng)單獨(dú)顯示Device部分的信息。
2.指定采樣時(shí)間間隔與采樣次數(shù)
與sar命令一樣,我們可以以"iostat interval [count] ”形式指定iostat命令的采樣間隔和采樣次數(shù):
linux # iostat -d 1 2 Linux 2.6.16.60-0.21-smp (linux) 06/13/12Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 0.558.9336.27673708627367728 sdb 0.000.000.009280Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 2.000.0072.00072 sdb 0.000.000.0000以上命令輸出Device的信息,采樣時(shí)間為1秒,采樣2次,若不指定采樣次數(shù),則iostat會(huì)一直輸出采樣信息,直到按”ctrl+c”退出命令。注意,第1次采樣信息與單獨(dú)執(zhí)行iostat的效果一樣,為從系統(tǒng)開(kāi)機(jī)到當(dāng)前執(zhí)行時(shí)刻的統(tǒng)計(jì)信息。
3.以kB為單位顯示讀寫(xiě)信息(-k選項(xiàng))
我們可以使用-k選項(xiàng),指定iostat的部分輸出結(jié)果以kB為單位,而不是以扇區(qū)數(shù)為單位:
linux # iostat -d -k Linux 2.6.16.60-0.21-smp (linux) 06/13/12Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 0.554.4618.12336854313686096 sdb 0.000.000.004640以上輸出中,kB_read/s、kB_wrtn/s、kB_read和kB_wrtn的值均以kB為單位,相比以扇區(qū)數(shù)為單位,這里的值為原值的一半(1kB=512bytes*2)
4.更詳細(xì)的io統(tǒng)計(jì)信息(-x選項(xiàng))
為顯示更詳細(xì)的io設(shè)備統(tǒng)計(jì)信息,我們可以使用-x選項(xiàng),在分析io瓶頸時(shí),一般都會(huì)開(kāi)啟-x選項(xiàng):
linux # iostat -x -k -d 1 Linux 2.6.16.60-0.21-smp (linux) 06/13/12…… Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util sda 0.009915.001.0090.004.0034360.00755.2511.79120.576.3357.60以上各列的含義如下:
rrqm/s: 每秒對(duì)該設(shè)備的讀請(qǐng)求被合并次數(shù),文件系統(tǒng)會(huì)對(duì)讀取同塊(block)的請(qǐng)求進(jìn)行合并
wrqm/s: 每秒對(duì)該設(shè)備的寫(xiě)請(qǐng)求被合并次數(shù)
r/s: 每秒完成的讀次數(shù)
w/s: 每秒完成的寫(xiě)次數(shù)
rkB/s: 每秒讀數(shù)據(jù)量(kB為單位)
wkB/s: 每秒寫(xiě)數(shù)據(jù)量(kB為單位)
avgrq-sz:平均每次IO操作的數(shù)據(jù)量(扇區(qū)數(shù)為單位)
avgqu-sz: 平均等待處理的IO請(qǐng)求隊(duì)列長(zhǎng)度
await: 平均每次IO請(qǐng)求等待時(shí)間(包括等待時(shí)間和處理時(shí)間,毫秒為單位)
svctm: 平均每次IO請(qǐng)求的處理時(shí)間(毫秒為單位)
%util: 采用周期內(nèi)用于IO操作的時(shí)間比率,即IO隊(duì)列非空的時(shí)間比率
對(duì)于以上示例輸出,我們可以獲取到以下信息:
每秒向磁盤(pán)上寫(xiě)30M左右數(shù)據(jù)(wkB/s值)
每秒有91次IO操作(r/s+w/s),其中以寫(xiě)操作為主體
平均每次IO請(qǐng)求等待處理的時(shí)間為120.57毫秒,處理耗時(shí)為6.33毫秒
等待處理的IO請(qǐng)求隊(duì)列中,平均有11.79個(gè)請(qǐng)求駐留
以上各值之間也存在聯(lián)系,我們可以由一些值計(jì)算出其他數(shù)值,例如:
util = (r/s+w/s) * (svctm/1000)
對(duì)于上面的例子有:util = (1+90)*(6.33/1000) = 0.57603
轉(zhuǎn)載于:https://blog.51cto.com/lonelyprogram/1355263
總結(jié)
以上是生活随笔為你收集整理的使用iostat分析IO性能的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。