vmstat是Virtual Meomory Statistics(虛拟記憶體統計)的縮寫,可對作業系統的虛拟記憶體、程序、CPU活動進行監控。是對系統的整體情況進行統計,不足之處是無法對某個程序進行深入分析。
1 實體記憶體和虛拟記憶體差別
實體記憶體就是系統硬體提供的記憶體大小,是真正的記憶體,相對于實體記憶體,在linux下還有一個虛拟記憶體的概念,虛拟記憶體就是為了滿足實體記憶體的不足而提出的政策,它是利用磁盤空間虛拟出的一塊邏輯記憶體,用作虛拟記憶體的磁盤空間被稱為交換空間(Swap Space)。
作為實體記憶體的擴充,linux會在實體記憶體不足時,使用交換分區的虛拟記憶體,更詳細的說,就是核心會将暫時不用的記憶體塊資訊寫到交換空間,這樣以來,實體記憶體得到了釋放,這塊記憶體就可以用于其它目的,當需要用到原始的内容時,這些資訊會被重新從交換空間讀入實體記憶體。
linux的記憶體管理采取的是分頁存取機制,為了保證實體記憶體能得到充分的利用,核心會在适當的時候将實體記憶體中不經常使用的資料塊自動交換到虛拟記憶體中,而将經常使用的資訊保留到實體記憶體。
2 虛拟記憶體原理
在系統中運作的每個程序都需要使用到記憶體,但不是每個程序都需要每時每刻使用系統配置設定的記憶體空間。當系統運作所需記憶體超過實際的實體記憶體,核心會釋放某些程序所占用但未使用的部分或所有實體記憶體,将這部分資料存儲在磁盤上直到程序下一次調用,并将釋放出的記憶體提供給有需要的程序使用。
在Linux記憶體管理中,主要是通過“調頁Paging”和“交換Swapping”來完成上述的記憶體排程。調頁算法是将記憶體中最近不常使用的頁面換到磁盤上,把活動頁面保留在記憶體中供程序使用。交換技術是将整個程序,而不是部分頁面,全部交換到磁盤上。
分頁(Page)寫入磁盤的過程被稱作Page-Out,分頁(Page)從磁盤重新回到記憶體的過程被稱作Page-In。當核心需要一個分頁時,但發現此分頁不在實體記憶體中(因為已經被Page-Out了),此時就發生了分頁錯誤(Page Fault)。
當系統核心發現可運作記憶體變少時,就會通過Page-Out來釋放一部分實體記憶體。盡管Page-Out不是經常發生,但是如果Page-out頻繁不斷的發生,直到當核心管理分頁的時間超過運作程式的時間時,系統效能會急劇下降。這時的系統已經運作非常慢或進入暫停狀态,這種狀态亦被稱作thrashing(颠簸)。
3 常見指令展示
3.1 vmstat 5 5 在5秒時間内進行5次采樣
字段說明:
Procs(程序):
r: 運作隊列中程序數量
b: 等待IO的程序數量
Memory(記憶體):
swpd: 使用虛拟記憶體大小
free: 可用記憶體大小
buff: 用作緩沖的記憶體大小
cache: 用作緩存的記憶體大小
Swap:
si: 每秒從交換區寫到記憶體的大小
so: 每秒寫入交換區的記憶體大小
IO:(現在的Linux版本塊的大小為1024bytes)
bi: 每秒讀取的塊數
bo: 每秒寫入的塊數
系統:
in: 每秒中斷數,包括時鐘中斷。【interrupt】
cs: 每秒上下文切換數。 【count/second】
CPU(以百分比表示):
us: 使用者程序執行時間(user time)
sy: 系統程序執行時間(system time)
id: 空閑時間(包括IO等待時間),中央處理器的空閑時間 。以百分比表示。
wa: 等待IO時間
備注:
如果r經常大于4,id經常少于40,表示cpu的負荷很重。
如果bi,bo長期不等于0,表示記憶體不足。
如果disk經常不等于0,且在b中的隊列大于3,表示io性能不好。
Linux在具有高穩定性、可靠性的同時,具有很好的可伸縮性和擴充性,能夠針對不同的應用和硬體環境調整,優化出滿足目前應用需要的最佳性能。是以企業在維護Linux系統、進行系統調優時,了解系統性能分析工具是至關重要的。
顯示活躍和非活躍記憶體
3.2 vmstat -a 2 5
-a 顯示活躍和非活躍記憶體,所顯示的内容除增加inact和active
顯示從系統啟動至今的fork數量
3.3 vmstat -f
linux下建立程序的系統調用是fork
說明: 資訊是從/proc/stat中的processes字段裡取得的
檢視記憶體使用的詳細資訊
3.4 vmstat -s
顯示記憶體相關統計資訊及多種系統活動數量
說明:這些資訊的分别來自于/proc/meminfo,/proc/stat和/proc/vmstat
檢視磁盤的讀/寫
3.5 vmstat -d 檢視磁盤的讀寫
說明:這些資訊主要來自于/proc/diskstats.
檢視/dev/sda1磁盤的讀/寫
3.6 vmstat -p /dev/sda1 顯示指定磁盤分區統計資訊
說明:這些資訊主要來自于/proc/diskstats.
reads:來自于這個分區的讀的次數。
read sectors:來自于這個分區的讀扇區的次數。
writes:來自于這個分區的寫的次數。
requested writes:來自于這個分區的寫請求次數。
檢視系統的slab資訊
3.7 vmstat -m
說明:這些資訊主要來自于/proc/slabinfo
有不對的地方希望不吝賜教,歡迎在評論區留言,分享你的看法。