linux命令學習(31)-iostat
【命令名稱】iostat
【使用權限】所有人
【命令語法】iostat [參數][時間][次數]
【功能說明】查看cpu,硬盤等設備的活動情況
【常用參數】c 顯示cpu使用信息
d 顯示磁盤使用信息,后面可以指定分區。
N 顯示磁盤陣列(LVM)使用信息
n 顯示NFS的使用信息
p 顯示各個分區的使用信息
k 以KB為單位顯示
m 以MB為單位顯示
t 顯示終端和CPU的信息
x 顯示詳細的信息
【命令實例】
1.第隔2秒鐘就運行一次iostat,共2次
[cxc@cxcserver ~]$ iostat 2 2
Linux 2.6.32-279.el6.x86_64 (cxcserver.computer) 01/30/2013 _x86_64_ (2 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.03 0.00 0.01 0.04 0.00 99.92
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 0.25 3.22 6.42 139764 278325
dm-0 0.00 0.02 0.00 848 0
avg-cpu: %user %nice %system %iowait %steal %idle
0.75 0.00 0.25 0.00 0.00 99.00
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 0.50 0.00 128.00 0 256
dm-0 0.00 0.00 0.00 0 0
[cxc@cxcserver ~]$
cpu屬性值說明:
%user: CPU處在用戶模式下的時間百分比
%nice: CPU處在帶NICE值的用戶模式下時間比
%system: CPU處在系統模式下的時間的百分比
%iowait: CPU等待輸入輸出完成時間的百分比
%idle: CPU空閑時間的百分比
%steal: 當管理另一虛擬CPU時,虛擬CPU的意識的等待百分比
說明:如果%iowait的值過高,表示硬盤存在I/O瓶頸,idle的值越高,表示CPU比較空閑,如果idle值高但系統響應速度慢時,可能是CPU等待分配內存,我們可以用free來查看內存。如果swap被占用多數,可以考慮內存。如果的%Idle的值持續低的話,表示考慮加增加CPU
2.iostat 輸出所以分區信息
[cxc@cxcserver ~]$ iostat -p
Linux 2.6.32-279.el6.x86_64 (cxcserver.computer) 01/30/2013 _x86_64_ (2 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.03 0.00 0.01 0.04 0.00 99.92
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 0.25 3.15 6.43 139764 285213
sda1 0.21 2.93 6.43 129818 285208
sda3 0.00 0.03 0.00 1384 0
sda4 0.00 0.00 0.00 20 1
sda5 0.01 0.07 0.00 3008 0
sda6 0.01 0.04 0.00 1744 0
sda7 0.01 0.03 0.00 1542 0
dm-0 0.00 0.02 0.00 848 0
[cxc@cxcserver ~]
硬盤簡單屬性說明:
Device 設備名稱
Tps 設備每秒的傳輸次數,“一次傳輸”的意思是“一次I/O請求”。多個邏輯請求可能會被合并為“一次I/O”請求
Blk_read/s:開機到現在,平均每秒從設備讀取數據量
Blk_wrtn/s:開機到現在,平均每秒從設備寫入數據量
Blk_read 開機到現在,讀取的數據問題
Blk_wrtn 開機到現在,寫入的數據總量
3. iostate詳細輸出硬盤的詳細信息
[cxc@cxcserver ~]$ iostat -d -x -k -p
Linux 2.6.32-279.el6.x86_64 (cxcserver.computer) 01/30/2013 _x86_64_ (2 CPU)
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 0.13 0.63 0.07 0.17 1.52 3.22 38.65 0.00 5.49 4.57 0.11
sda1 0.04 0.63 0.04 0.17 1.41 3.22 43.53 0.00 5.92 5.10 0.11
sda3 0.00 0.00 0.00 0.00 0.02 0.00 8.49 0.00 4.02 4.01 0.00
sda4 0.00 0.00 0.00 0.00 0.00 0.00 4.20 0.00 52.00 52.00 0.00
sda5 0.00 0.00 0.01 0.00 0.03 0.00 8.72 0.00 1.58 1.58 0.00
sda6 0.02 0.00 0.01 0.00 0.02 0.00 5.24 0.00 1.86 1.69 0.00
sda7 0.03 0.00 0.01 0.00 0.02 0.00 6.24 0.00 2.96 2.84 0.00
dm-0 0.00 0.00 0.00 0.00 0.01 0.00 7.64 0.00 1.40 1.06 0.00
[cxc@cxcserver ~]$
Rrqm/s 每秒進行merge的讀操作數目,即delta(rmerge)/s
Wrqm/s 每秒進行merge的寫操作數目,即delta(wmerge)/s
r/s 每秒完成讀I/O設備次數,即delta(rio)/s
w/s 每秒完成寫I/O設備次數,即delta(wio)/s
rsec/s 每秒讀扇區數
wsec/s 每秒寫扇區數
rkB/s 每秒讀k字節數
wkB/s 每秒寫k字節數
avgrq-sz 平均每次設備I/O操作的數據大小,rsect+wsect/rio+wio
avgqu-sz 平均I/O隊列長度,即delta(aveg)/s/1000
await 平均每次設備I/O操作的等待時間(毫秒)即delta(ruse+wuse)/delta(rio+wio)
svctm 平均每次設備I/O操作的服務時間(毫秒)即delta(use)/delta(rio+wio)
%util 一秒鐘有百分之多少的時間用于I/O的操作,
如果%util接近100%,I/O系統已經滿負荷,磁盤出現瓶頸
如果%util接近70%,I/O壓力就大了,一般讀取速度有較多的wait
avgqu-sz 也是個做 IO 調優時需要注意的地方,這個就是直接每次操作的數據的大小,如果次數多,但數據拿的小的話,其實 IO 也會很小。如果數據拿的大,才IO 的數據會高。也可以通過 avgqu-sz × ( r/s or w/s ) = rsec/s or wsec/s。也就是講,讀定速度是這個來決定的。
svctm 一般要小于 await (因為同時等待的請求的等待時間被重復計算了),svctm 的大小一般和磁盤性能有關,CPU/內存的負荷也會對其有影響,請求過多也會間接導致 svctm 的增加。await 的大小一般取決于服務時間(svctm) 以及 I/O 隊列的長度和 I/O 請求的發出模式。如果 svctm 比較接近 await,說明 I/O 幾乎沒有等待時間;如果 await 遠大于 svctm,說明 I/O 隊列太長,應用得到的響應時間變慢,如果響應時間超過了用戶可以容許的范圍,這時可以考慮更換更快的磁盤,調整內核 elevator 算法,優化應用,或者升級 CPU。
隊列長度(avgqu-sz)也可作為衡量系統 I/O 負荷的指標,但由于 avgqu-sz 是按照單位時間的平均值,所以不能反映瞬間的 I/O 洪水。
4.通過iostat輸出cpu信息
[cxc@cxcserver ~]$ iostat -c
Linux 2.6.32-279.el6.x86_64 (cxcserver.computer) 01/30/2013 _x86_64_ (2 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.03 0.00 0.01 0.04 0.00 99.93
[cxc@cxcserver ~]$