vmstat詳解

################################ vmstat詳解 ############################

vmstat命令是最常見的Linux/Unix監控工具,可以展現給定時間間隔的服務器的狀態值,包括服務器的CPU使用率,內存使用,虛擬內存交換情況,IO讀寫情況。這個命令是我查看Linux/Unix最喜愛的命令,一個是Linux/Unix都支持,二是相比top,我可以看到整個機器的CPU,內存,IO的使用情況,而不是單單看到各個進程的CPU使用率和內存使用率(使用場景不一樣)。

一般vmstat工具的使用是通過兩個數字參數來完成的,第一個參數是採樣的時間間隔數,單位是秒,第二個參數是採樣的次數

vmstat是Virtual Memory Statistics(虛擬內存統計)的縮寫,可對操作系統的虛擬內存、進程、CPU活動進行監視。

它是對系統的整體情況進行統計,不足之處是無法對某個進程進行深入分析。

vmstat -S m 1  表示每秒統計一次,並且一直統計


vmstat -S m 1 10  表示每秒統計一次,並且統計10次


blob.png


第一行:進程、內存、交換區、IO操作、System信息、cpu信息


r: 運行的和等待(CPU時間片)運行的進程數,這個值也可以判斷是否需要增加CPU(長期大於1)

b: 處於uninterruptible sleep的進程數,等待IO的進程數


內存:

s swpd:使用的虛擬內存總量;

s free:空閒內存總量;

s buff:被緩衝區buffer使用的內存總量;

s cache:被作爲cache使用的內存總量


swap:[/s]

s si:從磁盤換入的內存量;每秒從磁盤讀入虛擬內存的大小,如果這個值大於0,表示物理內存不夠用或者內存泄露了,要查找耗內存進程解決掉

s so:從內存換出到磁盤的內存量;每秒虛擬內存寫入磁盤的大小,如果這個值大於0,同上


cpu:

us:表示用戶態cpu使用率,即應用獲得cpu執行時間佔用cpu總時間的百分比,佔比高並不表示系統瓶頸。

sy:表示系統態cpu使用率,常指系統調度佔用cpu總時間的百分比。

id:表示系統空閒時間百分比。

獲得這三項數據的目的是爲了分析、減少sy的百分比,實際上要判斷導致應用異常需要綜合很多監控數據,具體靠經驗。


s bi:從塊設備接受;塊設備每秒接收的塊數量,這裏的塊設備是指系統上所有的磁盤和其他塊設備,默認塊大小是1024byte

s bo:發送到塊設備;塊設備每秒發送的塊數量,例如我們讀取文件,bo就要大於0。bi和bo一般都要接近0,不然就是IO過於頻繁,需要調整。

bi = block in = 讀磁盤IO

bo = block out = 寫磁盤IO


s in:每秒的中斷次數;

s cs:每秒上下文切換的次數


常見問題處理

如果r經常大於4,且id經常少於40,表示cpu的負荷很重。

如果bi,bo長期不等於0,表示內存不足。

1.)如果在processes中運行的序列(process r)是連續的大於在系統中的CPU的個數表示系統現在運行比較慢,有多數的進程等待CPU

2.)如果r的輸出數大於系統中可用CPU個數的4倍的話,則系統面臨着CPU短缺的問題,或者是CPU的速率過低,系統中有多數的進程在等待CPU,造成系統中進程運行過慢。

3.)如果空閒時間(cpu id)持續爲0並且系統時間(cpu sy)是用戶時間的兩倍(cpu us)系統則面臨着CPU資源的短缺。

解決辦法:

當發生以上問題的時候請先調整應用程序對CPU的佔用情況.使得應用程序能夠更有效的使用CPU.同時可以考慮增加更多的CPU.  關於CPU的使用情況還可以結合mpstat,  ps aux top  prstat –a等等一些相應的命令來綜合考慮關於具體的CPU的使用情況,和那些進程在佔用大量的CPU時間.一般情況下,應用程序的問題會比較大一些.比如一些sql語句不合理等等都會造成這樣的現象.

內存問題現象:

內存的瓶頸是由scan rate (sr)來決定的.scan rate是通過每秒的始終算法來進行頁掃描的.如果scan rate(sr)連續的大於每秒200頁則表示可能存在內存缺陷.同樣的如果page項中的pi和po這兩欄表示每秒頁面的調入的頁數和每秒調出的頁數.如果該值經常爲非零值,也有可能存在內存的瓶頸,當然,如果個別的時候不爲0的話,屬於正常的頁面調度這個是虛擬內存的主要原理.

解決辦法: 
1.調節applications & servers使得對內存和cache的使用更加有效.

2.增加系統的內存.

3. Implement priority paging in s in pre solaris 8 versions by adding line "set priority paging=1" in /etc/system. Remove this line if upgrading from Solaris 7 to 8 & retaining old /etc/system file.

關於內存的使用情況還可以結ps aux top  prstat –a等等一些相應的命令來綜合考慮關於具體的內存的使用情況,和那些進程在佔用大量的內存.一般情況下,如果內存的佔用率比較高,但是,CPU的佔用很低的時候,可以考慮是有很多的應用程序佔用了內存沒有釋放,但是,並沒有佔用CPU時間,可以考慮應用程序,對於未佔用CPU時間和一些後臺的程序,釋放內存的佔用。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章