每天一個linux命(ming)令(47):iostat命(ming)令
Linux系統中(zhong)的 iostat是(shi)I/O statistics(輸入/輸出統(tong)計(ji))的縮寫,iostat工(gong)具將對系(xi)統(tong)的磁(ci)盤操作活動進行(xing)監視(shi)。它的特點是(shi)匯報磁(ci)盤活動統(tong)計(ji)情況,同時也會匯報出CPU使用情況。同vmstat一樣,iostat也有(you)一個弱點,就是(shi)它不(bu)能對某個進程進行(xing)深(shen)入分(fen)析(xi),僅對系(xi)統(tong)的整體(ti)情況進行(xing)分(fen)析(xi)。iostat屬于(yu)sysstat軟件包(bao)。可以用yum install sysstat 直接安裝(zhuang)。
1.命(ming)令格式(shi):
iostat[參數][時(shi)間][次數]
2.命令(ling)功(gong)能:
通過iostat方便查(cha)看CPU、網卡、tty設備、磁(ci)盤、CD-ROM 等等設備的活動情況, 負載信(xin)息(xi)。
3.命令(ling)參數:
-C 顯示CPU使用(yong)情況(kuang)
-d 顯示磁盤使用情況(kuang)
-k 以 KB 為單位顯示
-m 以 M 為單位顯(xian)示
-N 顯(xian)示磁盤陣列(LVM) 信息(xi)
-n 顯示NFS 使用情況
-p[磁(ci)盤(pan)] 顯示(shi)磁(ci)盤(pan)和分區的情況(kuang)
-t 顯示終端和CPU的信息(xi)
-x 顯示詳(xiang)細(xi)信息
-V 顯示(shi)版本信息
4.使用實例:
實例1:顯(xian)示所有設(she)備負載情(qing)況
命令:
iostat
輸(shu)出:
Linux 2.6.18-128.el5 (CT1186) 2012年12月28日
avg-cpu: %user %nice %system %iowait %steal %idle
8.30 0.02 5.07 0.17 0.00 86.44
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 22.73 43.70 487.42 674035705 7517941952
sda1 0.00 0.00 0.00 2658 536
sda2 0.11 3.74 3.51 57721595 54202216
sda3 0.98 0.61 17.51 9454172 270023368
sda4 0.00 0.00 0.00 6 0
sda5 6.95 0.12 108.73 1924834 1677123536
sda6 2.20 0.18 31.22 2837260 481488056
sda7 12.48 39.04 326.45 602094508 5035104240
說明(ming):
cpu屬性值說明:
%user:CPU處在用戶模式下(xia)的時間百(bai)分比。
%nice:CPU處在帶NICE值的用戶模(mo)式下的時間百分(fen)比。
%system:CPU處在系統模式下的時間百分比。
%iowait:CPU等待輸入輸出完成(cheng)時間的百分比(bi)。
%steal:管理程序維護另(ling)一個虛(xu)(xu)擬(ni)處理器(qi)時,虛(xu)(xu)擬(ni)CPU的(de)無意識(shi)等待時間百(bai)分比(bi)。
%idle:CPU空閑時間百分(fen)比(bi)。
備注(zhu):如果%iowait的(de)值過高,表(biao)(biao)示硬(ying)盤存(cun)在I/O瓶頸(jing),%idle值高,表(biao)(biao)示CPU較(jiao)空閑,如果%idle值高但系統(tong)(tong)響應(ying)(ying)慢(man)時,有可(ke)能(neng)是CPU等待分配內存(cun),此時應(ying)(ying)加大內存(cun)容量。%idle值如果持(chi)續低于10,那么系統(tong)(tong)的(de)CPU處理能(neng)力相對較(jiao)低,表(biao)(biao)明系統(tong)(tong)中最需要解決的(de)資(zi)源(yuan)是CPU。
disk屬性值說(shuo)明:
rrqm/s: 每秒進行(xing) merge 的讀操作數目。即(ji) rmerge/s
wrqm/s: 每秒進行 merge 的寫操作數目。即(ji) wmerge/s
r/s: 每(mei)秒完成的(de)讀 I/O 設備(bei)次(ci)數。即(ji) rio/s
w/s: 每(mei)秒完成(cheng)的寫 I/O 設備次數。即 wio/s
rsec/s: 每(mei)秒讀扇區(qu)數。即(ji) rsect/s
wsec/s: 每(mei)秒寫(xie)扇區數。即 wsect/s
rkB/s: 每秒讀K字(zi)節(jie)數。是 rsect/s 的一半,因為(wei)每扇區大小(xiao)為(wei)512字(zi)節(jie)。
wkB/s: 每秒寫K字節數。是 wsect/s 的一半。
avgrq-sz: 平(ping)均每次設備I/O操作的(de)數(shu)據大小 (扇區)。
avgqu-sz: 平均I/O隊列長度。
await: 平(ping)均每次(ci)設(she)備(bei)I/O操(cao)作(zuo)的等(deng)待時(shi)間 (毫(hao)秒)。
svctm: 平均每次設備I/O操作的(de)服(fu)務時(shi)間 (毫秒)。
%util: 一秒中有(you)百分(fen)(fen)之多少(shao)的(de)時間用(yong)于 I/O 操作(zuo),即被(bei)io消耗的(de)cpu百分(fen)(fen)比(bi)
備(bei)注:如(ru)果(guo)(guo)(guo) %util 接(jie)近 100%,說明(ming)產生的I/O請求太(tai)(tai)多,I/O系統已(yi)經滿(man)負荷,該磁盤可能存在瓶頸。如(ru)果(guo)(guo)(guo) svctm 比較接(jie)近 await,說明(ming) I/O 幾乎(hu)沒有等待時間(jian);如(ru)果(guo)(guo)(guo) await 遠大于 svctm,說明(ming)I/O 隊列太(tai)(tai)長(chang),io響應太(tai)(tai)慢(man),則需(xu)要進(jin)行必要優化。如(ru)果(guo)(guo)(guo)avgqu-sz比較大,也表示有當量io在等待。
實(shi)例(li)2:定時顯示所(suo)有信息(xi)
命令:
iostat 2 3
輸出:
Linux 2.6.18-128.el5 (CT1186) 2012年12月28日
avg-cpu: %user %nice %system %iowait %steal %idle
8.30 0.02 5.07 0.17 0.00 86.44
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 22.73 43.70 487.42 674035705 7517947296
sda1 0.00 0.00 0.00 2658 536
sda2 0.11 3.74 3.51 57721595 54202216
sda3 0.98 0.61 17.51 9454172 270023608
sda4 0.00 0.00 0.00 6 0
sda5 6.95 0.12 108.73 1924834 1677125640
sda6 2.20 0.18 31.22 2837260 481488152
sda7 12.48 39.04 326.44 602094508 5035107144
avg-cpu: %user %nice %system %iowait %steal %idle
8.88 0.00 7.94 0.19 0.00 83.00
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 6.00 0.00 124.00 0 248
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 0.00 0.00 0.00 0 0
sda6 0.00 0.00 0.00 0 0
sda7 6.00 0.00 124.00 0 248
avg-cpu: %user %nice %system %iowait %steal %idle
9.12 0.00 7.81 0.00 0.00 83.07
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 4.00 0.00 84.00 0 168
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 0.00 0.00 0.00 0 0
sda6 4.00 0.00 84.00 0 168
sda7 0.00 0.00 0.00 0 0
說明:
每隔(ge) 2秒刷新顯示(shi),且(qie)顯示(shi)3次(ci)
實例(li)3:顯(xian)示指定磁盤信息(xi)
命(ming)令:
iostat -d sda1
輸(shu)出:
Linux 2.6.18-128.el5 (CT1186) 2012年12月28日
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda1 0.00 0.00 0.00 2658 536
說明:
實(shi)例4:顯示tty和Cpu信息
命令:
iostat -t
輸出:
Linux 2.6.18-128.el5 (CT1186) 2012年12月28日
Time: 14時58分35秒
avg-cpu: %user %nice %system %iowait %steal %idle
8.30 0.02 5.07 0.17 0.00 86.44
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 22.73 43.70 487.41 674035705 7517957864
sda1 0.00 0.00 0.00 2658 536
sda2 0.11 3.74 3.51 57721595 54202216
sda3 0.98 0.61 17.51 9454172 270024344
sda4 0.00 0.00 0.00 6 0
sda5 6.95 0.12 108.73 1924834 1677128808
sda6 2.20 0.18 31.22 2837260 481488712
sda7 12.48 39.04 326.44 602094508 5035113248
說明:
實例5:以M為單位顯示(shi)所有信息(xi)
命令:
iostat -m
輸出:
Linux 2.6.18-128.el5 (CT1186) 2012年12月28日
avg-cpu: %user %nice %system %iowait %steal %idle
8.30 0.02 5.07 0.17 0.00 86.44
Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn
sda 22.72 0.02 0.24 329119 3670881
sda1 0.00 0.00 0.00 1 0
sda2 0.11 0.00 0.00 28184 26465
sda3 0.98 0.00 0.01 4616 131848
sda4 0.00 0.00 0.00 0 0
sda5 6.95 0.00 0.05 939 818911
sda6 2.20 0.00 0.02 1385 235102
sda7 12.48 0.02 0.16 293991 2458553
說明:
實例6:查看TPS和吞吐量信息
命令:
iostat -d -k 1 1
輸出:
Linux 2.6.18-128.el5 (CT1186) 2012年12月28日
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 22.72 21.85 243.71 337017916 3758984340
sda1 0.00 0.00 0.00 1329 268
sda2 0.11 1.87 1.76 28860797 27101108
sda3 0.98 0.31 8.75 4727086 135012508
sda4 0.00 0.00 0.00 3 0
sda5 6.95 0.06 54.37 962481 838566148
sda6 2.20 0.09 15.61 1418630 240744712
sda7 12.48 19.52 163.22 301047254 2517559596
說明:
tps:該設備每秒(miao)的傳(chuan)輸次(ci)(ci)數(Indicate the number of transfers per second that were issued to the device.)。“一次(ci)(ci)傳(chuan)輸”意(yi)思是“一次(ci)(ci)I/O請求”。多個邏輯請求可能會被合并為“一次(ci)(ci)I/O請求”。“一次(ci)(ci)傳(chuan)輸”請求的大小是未知(zhi)的。
kB_read/s:每(mei)秒從設備(drive expressed)讀取的數據(ju)量(liang);
kB_wrtn/s:每秒向設備(drive expressed)寫入的數據量;
kB_read:讀取的總(zong)數據量;kB_wrtn:寫入(ru)的總(zong)數量數據量;
這些(xie)單(dan)位都為Kilobytes。
上面的(de)(de)例子中,我(wo)們可(ke)以看(kan)到磁盤(pan)(pan)sda以及它(ta)的(de)(de)各個(ge)分區的(de)(de)統計數據,當時(shi)統計的(de)(de)磁盤(pan)(pan)總TPS是22.73,下面是各個分(fen)區(qu)的(de)TPS。(因為是瞬間值,所以總(zong)TPS并不嚴格等于各個分(fen)區(qu)TPS的(de)總(zong)和)
實例7:查(cha)看設備使(shi)用率(%util)、響應時間(await)
命令(ling):
iostat -d -x -k 1 1
輸(shu)出:
Linux 2.6.18-128.el5 (CT1186) 2012年12月28日
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 0.44 38.59 0.40 22.32 21.85 243.71 23.37 0.04 1.78 4.20 9.54
sda1 0.00 0.00 0.00 0.00 0.00 0.00 18.90 0.00 8.26 6.46 0.00
sda2 0.36 0.43 0.11 0.01 1.87 1.76 63.57 0.01 63.75 1.94 0.02
sda3 0.00 1.24 0.04 0.95 0.31 8.75 18.42 0.04 39.77 8.73 0.86
sda4 0.00 0.00 0.00 0.00 0.00 0.00 2.00 0.00 19.67 19.67 0.00
sda5 0.00 6.65 0.00 6.94 0.06 54.37 15.67 0.26 36.81 4.48 3.11
sda6 0.00 1.71 0.01 2.19 0.09 15.61 14.29 0.03 12.40 5.84 1.28
sda7 0.08 28.56 0.25 12.24 19.52 163.22 29.28 0.27 21.46 5.00 6.25
說明:
rrqm/s: 每秒(miao)進行 merge 的讀(du)操(cao)作(zuo)數目.即 delta(rmerge)/s
wrqm/s: 每秒進行 merge 的寫操作數目.即(ji) delta(wmerge)/s
r/s: 每秒完(wan)成(cheng)的讀(du) I/O 設備(bei)次(ci)數.即 delta(rio)/s
w/s: 每秒完成(cheng)的寫 I/O 設備(bei)次數.即 delta(wio)/s
rsec/s: 每秒讀扇(shan)區數.即 delta(rsect)/s
wsec/s: 每(mei)秒(miao)寫扇(shan)區數.即 delta(wsect)/s
rkB/s: 每秒(miao)讀K字(zi)節數.是 rsect/s 的一半,因(yin)為每扇區大小為512字(zi)節.(需要計算)
wkB/s: 每秒寫K字節數.是 wsect/s 的一半.(需(xu)要計(ji)算(suan))
avgrq-sz:平均每(mei)次設備I/O操作的數據大小 (扇區).delta(rsect+wsect)/delta(rio+wio)
avgqu-sz:平均(jun)I/O隊列長度.即 delta(aveq)/s/1000 (因為aveq的單位為毫秒).
await: 平均每次設備I/O操作的等(deng)待(dai)時間 (毫(hao)秒).即 delta(ruse+wuse)/delta(rio+wio)
svctm: 平均(jun)每次設(she)備I/O操作的服務時間 (毫秒).即 delta(use)/delta(rio+wio)
%util: 一秒中有(you)百分之多少的(de)時間(jian)用于 I/O 操作(zuo),或(huo)者(zhe)說一秒中有(you)多少時間(jian) I/O 隊(dui)列是非空的(de),即 delta(use)/s/1000 (因為use的單位(wei)為毫秒)
如果 %util 接近(jin) 100%,說明產(chan)生的(de)I/O請求太多,I/O系(xi)統已經滿(man)負荷(he),該磁盤可能(neng)存在瓶頸(jing)。
idle小(xiao)于(yu)70% IO壓力就較(jiao)大了,一般讀取速(su)度有較多的wait。
同時(shi)可以結合vmstat 查(cha)看查(cha)看b參(can)數(等(deng)待資源的進(jin)程數)和wa參(can)數(IO等(deng)待所(suo)占(zhan)用的CPU時(shi)間的百分比,高過30%時IO壓(ya)力高)。
另外 await 的(de)參數也要(yao)多和 svctm 來參考。差的過高就一定(ding)有 IO 的問題(ti)。
avgqu-sz 也(ye)是個做 IO 調優時(shi)需要注意的(de)地方,這個就是直接每次操作的(de)數據(ju)的(de)大小,如果(guo)次數多,但數據(ju)拿(na)的小(xiao)的話(hua),其(qi)實(shi) IO 也會很小。如果數據(ju)拿的大,才IO 的數據會高。也可(ke)以通過 avgqu-sz × ( r/s or w/s ) = rsec/s or wsec/s。也就是講(jiang),讀定(ding)(ding)速度是這個來決定(ding)(ding)的。
svctm 一般要(yao)小于 await (因為同時(shi)等(deng)待的請求的等(deng)待時(shi)間被重(zhong)復計(ji)算(suan)了),svctm 的大小(xiao)一般和磁盤性能有關,CPU/內存的(de)負(fu)荷(he)也會對(dui)其有影響,請求過(guo)多也會間接導致 svctm 的(de)增(zeng)加。await 的(de)大小一般(ban)取決于服務(wu)時間(svctm) 以及 I/O 隊列的(de)長度和 I/O 請(qing)求的(de)發出模式(shi)。如(ru)果(guo) svctm 比較接近 await,說明 I/O 幾乎沒有等待時間;如果 await 遠大于 svctm,說明 I/O 隊列太長(chang),應用得到(dao)的響應時間變慢,如(ru)果響應(ying)時間超過了用戶可以容許的(de)范圍,這時可(ke)以考慮更(geng)換更(geng)快(kuai)的磁(ci)盤(pan),調整內核 elevator 算法,優(you)化應(ying)用,或者升(sheng)級 CPU。
隊列長度(avgqu-sz)也可作為衡量系統 I/O 負荷的指標,但由(you)于 avgqu-sz 是按照單(dan)位(wei)時間(jian)的平均值,所以不能反映瞬間的 I/O 洪水。
形象(xiang)的比(bi)喻:
r/s+w/s 類(lei)似于交款人的總數
平(ping)(ping)均隊列(lie)長(chang)度(avgqu-sz)類似于單位時間(jian)里(li)平(ping)(ping)均排隊人(ren)的(de)個數
平(ping)均服務時間(svctm)類似于收銀員(yuan)的收款速(su)度
平均等待時(shi)間(await)類似于平均每人的等待時(shi)間
平均I/O數據(avgrq-sz)類(lei)似(si)于平均每人所買(mai)的東西多(duo)少
I/O 操作率(lv) (%util)類似于(yu)收款臺(tai)前有人(ren)排隊的(de)時(shi)間比例
設備IO操(cao)作:總IO(io)/s = r/s(讀) +w/s(寫) =1.46 + 25.28=26.74
平均(jun)每次(ci)設(she)備(bei)I/O操作只需要(yao)0.36毫秒完成,現(xian)在卻需要(yao)10.57毫秒完成,因(yin)為發出的 請求(qiu)太多(每秒26.74個),假如請求(qiu)時同時發出(chu)的,可以這樣計算平均等(deng)待(dai)時間:
平均等(deng)待時(shi)間=單個I/O服(fu)務器時(shi)間*(1+2+...+請(qing)求(qiu)(qiu)總數-1)/請(qing)求(qiu)(qiu)總數
每秒(miao)發出的I/0請(qing)求很多,但是平(ping)均隊(dui)列就(jiu)4,表(biao)示這些請(qing)求比(bi)較均勻,大部(bu)分處理還是比(bi)較及(ji)時。
實例8:查看cpu狀態(tai)
命令:
iostat -c 1 3
輸出:
Linux 2.6.18-128.el5 (CT1186) 2012年12月28日
avg-cpu: %user %nice %system %iowait %steal %idle
8.30 0.02 5.07 0.17 0.00 86.44
avg-cpu: %user %nice %system %iowait %steal %idle
8.64 0.00 5.38 0.00 0.00 85.98
avg-cpu: %user %nice %system %iowait %steal %idle
7.62 0.00 5.12 0.50 0.00 86.75
說明(ming):
關注 熵減黑客 ,一起學習成長
