原文:http://www.CUOXin.com/bangerlee/articles/2547161.html
對于I/O-bond類型的進程,我們經常用iostat工具查看進程IO請求下發的數量、系統處理IO請求的耗時,進而分析進程與操作系統的交互過程中IO方面是否存在瓶頸。
下面通過iostat命令使用實例,說明使用iostat查看IO請求下發情況、系統IO處理能力的方法,以及命令執行結果中各字段的含義。
1.不加選項執行iostat
我們先來看直接執行iostat的輸出結果:

linux # iostatLinux 2.6.16.60-0.21-smp (linux) 06/12/12avg-cpu: %user %nice %system %iowait %steal %idle 0.07 0.00 0.05 0.06 0.00 99.81Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtnsda 0.58 9.95 37.47 6737006 25377400sdb 0.00 0.00 0.00 824 0

單獨執行iostat,顯示的結果為從系統開機到當前執行時刻的統計信息。以上輸出中,除最上面指示系統版本、主機名和日期的一行外,另有兩部分:
avg-cpu:總體cpu使用情況統計信息,對于多核cpu,這里為所有cpu的平均值
Device:各磁盤設備的IO統計信息
對于cpu統計信息一行,我們主要看iowait的值,它指示cpu用于等待io請求完成的時間。Device中各列含義如下:
我們可以使用-c選項單獨顯示avg-cpu部分的結果,使用-d選項單獨顯示Device部分的信息。
2.指定采樣時間間隔與采樣次數
與sar命令一樣,我們可以以"iostat interval [count]”形式指定iostat命令的采樣間隔和采樣次數:

linux # iostat -d 1 2Linux 2.6.16.60-0.21-smp (linux) 06/13/12Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtnsda 0.55 8.93 36.27 6737086 27367728sdb 0.00 0.00 0.00 928 0Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtnsda 2.00 0.00 72.00 0 72sdb 0.00 0.00 0.00 0 0

以上命令輸出Device的信息,采樣時間為1秒,采樣2次,若不指定采樣次數,則iostat會一直輸出采樣信息,直到按”ctrl+c”退出命令。注意,第1次采樣信息與單獨執行iostat的效果一樣,為從系統開機到當前執行時刻的統計信息。
3.以kB為單位顯示讀寫信息(-k選項)
我們可以使用-k選項,指定iostat的部分輸出結果以kB為單位,而不是以扇區數為單位:

linux # iostat -d -kLinux 2.6.16.60-0.21-smp (linux) 06/13/12Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtnsda 0.55 4.46 18.12 3368543 13686096sdb 0.00 0.00 0.00 464 0

以上輸出中,kB_read/s、kB_wrtn/s、kB_read和kB_wrtn的值均以kB為單位,相比以扇區數為單位,這里的值為原值的一半(1kB=512bytes*2)
4.更詳細的io統計信息(-x選項)
為顯示更詳細的io設備統計信息,我們可以使用-x選項,在分析io瓶頸時,一般都會開啟-x選項:
linux # iostat -x -k -d 1Linux 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 %utilsda 0.00 9915.00 1.00 90.00 4.00 34360.00 755.25 11.79 120.57 6.33 57.60
以上各列的含義如下:
對于以上示例輸出,我們可以獲取到以下信息:
以上各值之間也存在聯系,我們可以由一些值計算出其他數值,例如:
util = (r/s+w/s) * (svctm/1000)
對于上面的例子有:util = (1+90)*(6.33/1000) = 0.57603
|
新聞熱點
疑難解答