################################ 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次
第一行:進程、內存、交換區、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時間和一些後臺的程序,釋放內存的佔用。