Vmstat -SM 2資訊命令-詳解
一、前言
vmstat命令: 用來獲得有關程序、虛存、頁面交換空間及 CPU活動的資訊。這些資訊反映了系統的負載情況
二、虛擬記憶體執行原理
在系統中執行的每個程序都需要使用到記憶體,但不是每個程序都需要每時每刻使用系統分配的記憶體空間。當系統執行所需記憶體超過實際的實體記憶體,核心會釋放某些程序所佔用但未使用的部分或所有實體記憶體,將這部分資料儲存在磁碟上直到程序下一次呼叫,並將釋放出的記憶體提供給有需要的程序使用。
在Linux記憶體管理中,主要是通過“調頁Paging”和“交換Swapping”來完成上述的記憶體排程。調頁演算法是將記憶體中最近不常使用的頁面換到磁碟上,把活動頁面保留在記憶體中供程序使用。交換技術是將整個程序,而不是部分頁面,全部交換到磁碟上。
分頁(Page)寫入磁碟的過程被稱作Page-Out,分頁(Page)從磁碟重新回到記憶體的過程被稱作Page-In。當核心需要一個分頁時,但發現此分頁不在實體記憶體中(因為已經被Page-Out了),此時就發生了分頁錯誤(Page Fault)。
當系統核心發現可執行記憶體變少時,就會通過Page-Out來釋放一部分實體記憶體。經管Page-Out不是經常發生,但是如果Page-out頻繁不斷的發生,直到當核心管理分頁的時間超過執行程式的時間時,系統效能會急劇下降。這時的系統已經執行非常慢或進入暫停狀態,這種狀態亦被稱作thrashing(顛簸)。
三、使用vmstat
1.用法
vmstat [-a] [-n] [-S unit] [delay [ count]]
vmstat [-s] [-n] [-S unit]
vmstat [-m] [-n] [delay [ count]]
vmstat [-d] [-n] [delay [ count]]
vmstat [-p disk partition] [-n] [delay [ count]]
vmstat [-f]
vmstat [-V]
-a:顯示活躍和非活躍記憶體
-f:顯示從系統啟動至今的fork數量 。
-m:顯示slabinfo
-n:只在開始時顯示一次各欄位名稱。
-s:顯示記憶體相關統計資訊及多種系統活動數量。
delay:重新整理時間間隔。如果不指定,只顯示一條結果。
count:重新整理次數。如果不指定重新整理次數,但指定了重新整理時間間隔,這時重新整理次數為無窮。
-d:顯示磁碟相關統計資訊。
-p:顯示指定磁碟分割槽統計資訊
-S:使用指定單位顯示。引數有 k 、K 、m 、M ,分別代表1000、1024、1000000、1048576位元組(byte)。預設單位為K(1024 bytes)
-V:顯示vmstat版本資訊。
2.欄位含義說明:
類別 |
專案 |
含義 |
說明 |
Procs(程序) |
r |
等待執行的任務數 |
展示了正在執行和等待cpu資源的任務個數。當這個值超過了cpu個數,就會出現cpu瓶頸。 |
B |
等待IO的程序數量 |
|
|
Memory(記憶體) |
swpd |
正在使用虛擬的記憶體大小,單位k |
|
free |
空閒記憶體大小 |
|
|
buff |
已用的buff大小,對塊裝置的讀寫進行緩衝 |
|
|
cache |
已用的cache大小,檔案系統的cache |
|
|
inact |
非活躍記憶體大小,即被標明可回收的記憶體,區別於free和active |
具體含義見:概念補充(當使用-a選項時顯示) |
|
active |
活躍的記憶體大小 |
具體含義見:概念補充(當使用-a選項時顯示) |
|
Swap |
si |
每秒從交換區寫入記憶體的大小(單位:kb/s) |
|
so |
每秒從記憶體寫到交換區的大小 |
|
|
IO |
bi |
每秒讀取的塊數(讀磁碟) |
現在的Linux版本塊的大小為1024bytes |
bo |
每秒寫入的塊數(寫磁碟) |
|
|
system |
in |
每秒中斷數,包括時鐘中斷 |
這兩個值越大,會看到由核心消耗的cpu時間會越多 |
cs |
每秒上下文切換數 |
||
CPU(以百分比表示) |
Us |
使用者程序執行消耗cpu時間(user time) |
us的值比較高時,說明使用者程序消耗的cpu時間多,但是如果長期超過50%的使用,那麼我們就該考慮優化程式演算法或其他措施了 |
Sy |
系統程序消耗cpu時間(system time) |
sys的值過高時,說明系統核心消耗的cpu資源多,這個不是良性的表現,我們應該檢查原因。 |
|
Id |
空閒時間(包括IO等待時間) |
|
|
wa |
等待IO時間 |
Wa過高時,說明io等待比較嚴重,這可能是由於磁碟大量隨機訪問造成的,也有可能是磁碟的頻寬出現瓶頸。 |
四、常見問題處理
如果r經常大於4,且id經常少於40,表示cpu的負荷很重。
如果pi,po長期不等於0,表示記憶體不足。
如果disk經常不等於0,且在b中的佇列大於3,表示io效能不好。
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時間和一些後臺的程式,釋放記憶體的佔用。