對於I/O-bond類型的進程,咱們常常用iostat工具查看進程IO請求下發的數量、系統處理IO請求的耗時,進而分析進程與操做系統的交互過程當中IO方面是否存在瓶頸。linux
下面經過iostat命令使用實例,說明使用iostat查看IO請求下發狀況、系統IO處理能力的方法,以及命令執行結果中各字段的含義。ios
1.不加選項執行iostat工具
咱們先來看直接執行iostat的輸出結果:操作系統
linux # iostat Linux 2.6.16.60-0.21-smp (linux) 06/12/12 avg-cpu: %user %nice %system %iowait %steal %idle 0.07 0.00 0.05 0.06 0.00 99.81 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 0.58 9.95 37.47 6737006 25377400 sdb 0.00 0.00 0.00 824 0
單獨執行iostat,顯示的結果爲從系統開機到當前執行時刻的統計信息。以上輸出中,除最上面指示系統版本、主機名和日期的一行外,另有兩部分:隊列
avg-cpu: 整體cpu使用狀況統計信息,對於多核cpu,這裏爲全部cpu的平均值進程
Device: 各磁盤設備的IO統計信息it
對於cpu統計信息一行,咱們主要看iowait的值,它指示cpu用於等待io請求完成的時間。Device中各列含義以下:io
咱們能夠使用-c選項單獨顯示avg-cpu部分的結果,使用-d選項單獨顯示Device部分的信息。請求
2.指定採樣時間間隔與採樣次數方法
與sar命令同樣,咱們能夠以"iostat interval [count] 」形式指定iostat命令的採樣間隔和採樣次數:
linux # iostat -d 1 2 Linux 2.6.16.60-0.21-smp (linux) 06/13/12 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 0.55 8.93 36.27 6737086 27367728 sdb 0.00 0.00 0.00 928 0 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 2.00 0.00 72.00 0 72 sdb 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 -k Linux 2.6.16.60-0.21-smp (linux) 06/13/12 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 0.55 4.46 18.12 3368543 13686096 sdb 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 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.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