歡迎您光臨本站 註冊首頁

關於Linux性能監控之io篇

←手機掃碼閱讀     火星人 @ 2014-03-03 , reply:0

關於Linux性能監控之io篇

關於Linux性能監控相信大家已經小有了解,對於IO篇,讓我們先分析一些具體的情況,在這些情況下I/O會成為系統的瓶頸。我們會用到工具top,vmstat,iostat,sar等。每一個工具的輸出都從不同的方面反映除系統的性能情況。

Linux性能監控情況1:同一時間進行大量的I/O操作

在這種情況時我們會發現CPU的wa時間百分比會上升,證明系統的idle時間大部分都是在等待I/O操作。
# vmstat 1
procs -----memory----- ---swap---io---- --system--cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
3 2 0 55452 9236 1739020 0 0 9352 0 2580 8771 20 24 0 57
2 3 0 53888 9232 1740836 0 0 14860 0 2642 8954 23 25 0 52
2 2 0 51856 9212 1742928 0 0 12688 0 2636 8487 23 25 0 52

從這個輸出我們可以看到CPU有50%的時間都在等待I/O操作,我們還可以看到系統的bi值很大,證明系統有大量的I/O請求將磁碟內容讀入內存。

沒有很好的工具能看到到底是哪個進程在進行I/O讀寫。但我們可以通過top命令的輸出來猜測
# top -d 1
top - 19:45:07 up 1:40, 3 users, load average: 6.36, 5.87, 4.40
Tasks: 119 total, 3 running, 116 sleeping, 0 stopped, 0 zombie
Cpu(s): 5.9% us, 87.1% sy, 0.0% ni, 0.0% id, 5.9% wa, 1.0% hi, 0.0% si
Mem: 2075672k total, 2022668k used, 53004k free, 7156k buffers
Swap: 2031608k total, 132k used, 2031476k free, 1709372k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ nFLT COMMAND
3069 root 5 -10 450m 303m 280m S 61.5 15.0 10:56.68 4562 vmware-vmx
3016 root 5 -10 447m 300m 280m S 21.8 14.8 12:22.83 3978 vmware-vmx
3494 root 5 -10 402m 255m 251m S 3.0 12.6 1:08.65 3829 vmware-vmx
3624 root 5 -10 401m 256m 251m S 1.0 12.6 0:29.92 3747 vmware-vmx

將top的輸出通過faults進行排序。我們可以看到vmware產生最多的page faults。也就是說它進行了大量的IO操作。

Linux性能監控情況2:管道太小

任何I/O操作都需要一定的時間,而且這些時間對於硬碟來說是確定的,它包含磁碟旋轉的延時RD(rotation delay)和磁頭搜索時間DS(disk seek)。RD由磁碟轉速(RPM)決定。RD是磁碟旋轉一周所需時間的一半。如RPM為10000.
RPS=RPM/60=166
1/166=0.0006=6ms 磁碟旋轉一周要6毫秒
RD=6ms/2=3ms

磁碟平均搜索時間是3ms,數據傳輸的平均延時是2ms,這樣一次I/O操作的平均時間是:
3ms+3ms+2ms=8ms
IOPS=1000/8=125 這塊磁碟的每秒IO數(IOPS)為125。所以對於10000RPM的磁碟來說它所能承受的IO操作在IOPS在120~150之間。如果系統的I/O請求超過這個值,就會使磁碟成為系統的瓶頸。

對與系統而言有兩種不同種類的I/O壓力,連續I/O和隨機I/O。

連續I/O常常出現在企業級資料庫這樣的應用中,需要連續的讀取大量數據。這種系統的性能依靠它讀取和移動數據的大小和快慢。我們用iostat來監控,會發現rKB/s,wKB/s會很高。
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
/dev/sda 0.00 12891.43 0.00 105.71 0.00 106080.00 0.00 53040.00 1003.46 1099.43 3442.43 26.49 280.00

從輸出我們看到w/s=105,wKB/s=53040.所以53040/105=505KB per I/O.

對於隨機I/O的系統來說性能的關注點不在搜傳輸數據的大小和速度,而是在磁碟的IOPS。這類系統的I/O請求比較小但是數量很大,如Web伺服器和Mail伺服器。他們的性能主要依賴每秒鐘可處理的請求數:
# iostat -x 1
avg-cpu: %user %nice %sys %idle
2.04 0.00 97.96 0.00
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
/dev/sda 0.00 633.67 3.06 102.31 24.49 5281.63 12.24 2640.82 288.89 73.67 113.89 27.22 50.00

從輸出我們看到w/s=102,wKB/s=2640.所以2640/102=23KB per I/O.因此對於連續I/O系統來說我們要關注系統讀取大量數據的能力即KB per request.對於隨機I/O系統我們注重IOPS值.
《解決方案》

頂,很不錯的東西!!
感謝分享。這個對伺服器的性能優化很有用
《解決方案》

不錯,寫的挺好!
《解決方案》

《解決方案》

net-boy 發表於 2010-11-08 22:59 static/image/common/back.gif
關於Linux性能監控相信大家已經小有了解,對於IO篇,讓我們先分析一些具體的情況,在這些情況下I/O會成為系 ...



有一事不明白,請指點

任何I/O操作都需要一定的時間,而且這些時間對於硬碟來說是確定的,它包含磁碟旋轉的延時RD(rotation delay)和磁頭搜索時間DS(disk seek)。RD由磁碟轉速(RPM)決定。RD是磁碟旋轉一周所需時間的一半。如RPM為10000.
RPS=RPM/60=166   #這個60 代表什麼,是怎麼來的
1/166=0.0006=6ms 磁碟旋轉一周要6毫秒
RD=6ms/2=3ms

磁碟平均搜索時間是3ms,數據傳輸的平均延時是2ms,這樣一次I/O操作的平均時間是:
3ms+3ms+2ms=8ms
IOPS=1000/8=125  #這個1000代表什麼,又是怎麼來的
這塊磁碟的每秒IO數(IOPS)為125。所以對於10000RPM的磁碟來說它所能承受的IO操作在IOPS在120~150之間。如果系統的I/O請求超過這個值,就會使磁碟成為系統的瓶頸。
《解決方案》

回復 1# net-boy


    top,vmstat,iostat,sar這些工具對我們日 常排查問題很有幫助
《解決方案》

好帖子 頂..
《解決方案》

linux下的io監控是應該通過什麼方式實現比較好呢?top、vmstat、iostat、sar,這些命令以哪個為準呢?還是用snmp?
《解決方案》

本帖最後由 daiwliang 於 2013-03-02 13:45 編輯

# RPM=revolutions per minute, revolutions per second;
# 1s=1000ms
回復 5# initrdimg


   

[火星人 ] 關於Linux性能監控之io篇已經有406次圍觀

http://coctec.com/docs/service/show-post-386.html