Linux vmstat命令詳解

2021-10-06 17:14:00 字數 3782 閱讀 4091

vmstat是virtual meomory statistics(虛擬記憶體統計)的縮寫,可對作業系統的虛擬記憶體、程序、cpu活動進行監控。是對系統的整體情況進行統計,不足之處是無法對某個程序進行深入分析。

物理記憶體和虛擬記憶體區別

我們知道,直接從物理記憶體讀寫資料要比從硬碟讀寫資料要快的多,因此,我們希望所有資料的讀取和寫入都在記憶體完成,而記憶體是有限的,這樣就引出了物理記憶體與虛擬記憶體的概念。

物理記憶體就是系統硬體提供的記憶體大小,是真正的記憶體,相對於物理記憶體,在linux下還有乙個虛擬記憶體的概念,虛擬記憶體就是為了滿足物理記憶體的不足而提出的策略,它是利用磁碟空間虛擬出的一塊邏輯記憶體,用作虛擬記憶體的磁碟空間被稱為交換空間(swap space)。

作為物理記憶體的擴充套件,linux會在物理記憶體不足時,使用交換分割槽的虛擬記憶體,更詳細的說,就是核心會將暫時不用的記憶體塊資訊寫到交換空間,這樣以來,物理記憶體得到了釋放,這塊記憶體就可以用於其它目的,當需要用到原始的內容時,這些資訊會被重新從交換空間讀入物理記憶體。

linux的記憶體管理採取的是分頁訪問機制,為了保證物理記憶體能得到充分的利用,核心會在適當的時候將物理記憶體中不經常使用的資料塊自動交換到虛擬記憶體中,而將經常使用的資訊保留到物理記憶體。

要深入了解linux記憶體執行機制,需要知道下面提到的幾個方面:

首先,linux系統會不時的進行頁面交換操作,以保持盡可能多的空閒物理記憶體,即使並沒有什麼事情需要記憶體,linux也會交換出暫時不用的記憶體頁面。這可以避免等待交換所需的時間。

其次,linux進行頁面交換是有條件的,不是所有頁面在不用時都交換到虛擬記憶體,linux核心根據」最近最經常使用「演算法,僅僅將一些不經常使用的頁面檔案交換到虛擬記憶體,有時我們會看到這麼乙個現象:linux物理記憶體還有很多,但是交換空間也使用了很多。其實,這並不奇怪,例如,乙個占用很大記憶體的程序執行時,需要耗費很多記憶體資源,此時就會有一些不常用頁面檔案被交換到虛擬記憶體中,但後來這個占用很多記憶體資源的程序結束並釋放了很多記憶體時,剛才被交換出去的頁面檔案並不會自動的交換進物理記憶體,除非有這個必要,那麼此刻系統物理記憶體就會空閒很多,同時交換空間也在被使用,就出現了剛才所說的現象了。關於這點,不用擔心什麼,只要知道是怎麼一回事就可以了。

最後,交換空間的頁面在使用時會首先被交換到物理記憶體,如果此時沒有足夠的物理記憶體來容納這些頁面,它們又會被馬上交換出去,如此以來,虛擬記憶體中可能沒有足夠空間來儲存這些交換頁面,最終會導致linux出現假死機、服務異常等問題,linux雖然可以在一段時間內自行恢復,但是恢復後的系統已經基本不可用了。

因此,合理規劃和設計linux記憶體的使用,是非常重要的。

虛擬記憶體原理

在系統中執行的每個程序都需要使用到記憶體,但不是每個程序都需要每時每刻使用系統分配的記憶體空間。當系統執行所需記憶體超過實際的物理記憶體,核心會釋放某些程序所占用但未使用的部分或所有物理記憶體,將這部分資料儲存在磁碟上直到程序下一次呼叫,並將釋放出的記憶體提供給有需要的程序使用。

分頁(page)寫入磁碟的過程被稱作page-out,分頁(page)從磁碟重新回到記憶體的過程被稱作page-in。當核心需要乙個分頁時,但發現此分頁不在物理記憶體中(因為已經被page-out了),此時就發生了分頁錯誤(page fault)。

當系統核心發現可執行記憶體變少時,就會通過page-out來釋放一部分物理記憶體。儘管page-out不是經常發生,但是如果page-out頻繁不斷的發生,直到當核心管理分頁的時間超過執行程式的時間時,系統效能會急劇下降。這時的系統已經執行非常慢或進入暫停狀態,這種狀態亦被稱作thrashing(顛簸)。

常見命令展示

1vmstat 5 5 【在5秒時間內進行5次取樣】

image

字段說明:

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系統、進行系統調優時,了解系統效能分析工具是至關重要的。

顯示活躍和非活躍記憶體

vmstat -a 2 5 【-a 顯示活躍和非活躍記憶體,所顯示的內容除增加inact和active】

image

顯示從系統啟動至今的fork數量

vmstat -f 【 linux下建立程序的系統呼叫是fork】

image

說明: 資訊是從/proc/stat中的processes欄位裡取得的

檢視記憶體使用的詳細資訊

vmstat -s 【顯示記憶體相關統計資訊及多種系統活動數量】

image

說明:這些資訊的分別來自於/proc/meminfo,/proc/stat和/proc/vmstat

檢視磁碟的讀/寫

vmstat -d 【檢視磁碟的讀寫】

image

說明:這些資訊主要來自於/proc/diskstats.

檢視/dev/sda1磁碟的讀/寫

vmstat -p /dev/sda1 【顯示指定磁碟分割槽統計資訊】

image

說明:這些資訊主要來自於/proc/diskstats.

reads:來自於這個分割槽的讀的次數。

read sectors:來自於這個分割槽的讀扇區的次數。

writes:來自於這個分割槽的寫的次數。

requested writes:來自於這個分割槽的寫請求次數。

檢視系統的slab資訊

vmstat -m

說明:這些資訊主要來自於/proc/slabinfo

slab:由於核心會有許多小物件,這些物件構造銷毀十分頻繁,比如i-node,dentry,這些物件如果每次構建的時候就向記憶體要乙個頁(4kb),這樣就會非常浪費,為了解決這個問題,就引入了一種新的機制來處理在同乙個頁框中如何分配小儲存區,而slab可以對小物件進行分配,這樣就不用為每乙個物件分配頁框,從而節省了空間,核心對一些小物件建立析構很頻繁,slab對這些小物件進行緩衝,可以重複利用,減少記憶體分配次數。

檢視程序路徑

[root@localhost ~]# netstat -an | grep 2158

[root@localhost ~]# ll /proc/2158

image

cwd符號鏈結的是程序執行目錄;

exe符號連線就是執行程式的絕對路徑;

cmdline就是程式執行時輸入的命令列命令;

environ記錄了程序執行時的環境變數;

fd目錄下是程序開啟或使用的檔案的符號連線。

lsof -p 2158

Linux vmstat命令詳解

vmstat是乙個十分有用的linux系統監控工具,使用vmstat命令可以得到關於程序 記憶體 記憶體分頁 堵塞io traps及cpu活動的資訊。一 前言 二 虛擬記憶體執行原理 在系統中執行的每個程序都需要使用到記憶體,但不是每個程序都需要每時每刻使用系統分配的記憶體空間。當系統執行所需記憶體...

Linux vmstat 命令詳解

vmstat命令是最常見的linux unix監控工具,可以展現給定時間間隔的伺服器的狀態值,包括伺服器的cpu使用率,mem記憶體使用,vmswap虛擬記憶體交換情況,io讀寫情況。這個命令是檢視linux unix最好的命令,乙個是linux unix都支援,二是相比top,可以看到整個機器的c...

Linux vmstat 命令詳解

vmstat vmstat 是兩次執行之間的時間間隔,以秒為單位。是 vmstat 重複的次數。下面是當我們希望 vmstat 每隔 5 秒執行一次並在第 10 次執行後停止時的示例。每 5 秒之後都會輸出一行並顯示此時的統計資訊。vmstat 5 10 procs memory swap io s...