1. 程式人生 > >Vmstat -SM 2資訊命令-詳解

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時間和一些後臺的程式,釋放記憶體的佔用。