每天乙個linux命令 36 vmstat命令

2022-02-24 04:39:12 字數 4215 閱讀 8222

vmstat 是 virtual memory statistics(虛擬記憶體統計)的縮寫,可對作業系統的虛擬記憶體、程序、cpu活動進行監控。他是對系統的整體情況進行統計,不足之處是無法對某個程序進行深入分析。vmstat 工具提供了一種低開銷的系統效能觀察方式。因為 vmstat 本身就是低開銷工具,在非常高負荷的伺服器上,你需要檢視並監控系統的健康情況,在控制視窗還是能夠用vmstat 輸出結果。在學習 vmstat 命令前,我們先了解一下linux 系統中關於物理記憶體和虛擬記憶體相關資訊。

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

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

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

作為物理記憶體的擴充套件,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(顛簸)。

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]

2.命令功能:

用來顯示虛擬記憶體的資訊

3.命令引數:

-a  顯示活躍和非活躍記憶體

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

-m  顯示 slabinfo

-n    只在開始時顯示一次個欄位名稱

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

delay  重新整理時間間隔,如果不指定,只顯示一條結果

count  重新整理次數,如果不指定重新整理次數,但指定了重新整理時間間隔,這時重新整理次數為無窮

-d  顯示磁碟相關統計資訊

-p  顯示指定磁碟分割槽統計資訊

-s  顯示指定單位顯示。引數有 k, k, m, m, 

-v  顯示vmstat 版本資訊

4.使用例項:

例項1:顯示虛擬記憶體使用情況

命令: vmstat

字段說明:

procs(程序)

memory(記憶體)

swap

iosystem

cpur: 執行佇列中程序數量

swpd:使用虛擬記憶體大小

buff:用作緩衝的記憶體大小

si:每秒從交換區寫到記憶體的大小

bi:每秒讀取的塊數

in:每秒中斷數,包括時鐘中斷

us:使用者程序執行時間

id:空閒時間(包括io等待時間),**處理器的空閒時間

b:等待io的程序數量

free:可用記憶體大小

cache:用作快取的記憶體大小

so:每秒寫入交換區的記憶體大小

bo:每秒寫入的塊數

sy:系統程序執行時間

wa:等待io時間

備註:如果 r  經常大於 4,且id經常少於 40,表示cpu 的負荷很重。如果 pi, po長期不等於0,表示記憶體不足,如果disk 經常不等於0,且在b 中的佇列大於 3,表示io  效能不好。linux 在具有高穩定性、可靠性的同時,具有很好的可伸縮性和擴充套件性,能夠針對不同的應用和硬體環境調整,優化出滿足當前應用需要的最佳效能。因此企業在維護linux系統、進行系統調優時,了解系統效能分析工具是至關重要的。

命令:vmstat  5  5   表示每 5秒時間內進行 5次取樣。將得到乙個資料彙總他能夠反映真正的系統情況。

例項2:顯示活躍和非活躍記憶體

命令:vmstat  -a 2  5   

使用-a 選項顯示活躍和非活躍記憶體時,所顯示的內容除增加inactive(非活躍記憶體大小) 和 active(活躍的記憶體大小) 外,其他顯示內容與例子1相同。

例項3:檢視系統已經 fork 了多少次

命令:vmstat  -f    這個資料是從 /proc/stat 中的 processes 字段取得的

例項4:檢視記憶體使用的詳細資訊

命令:vmstat  -s    這些資訊的分別是來自於/proc/meminfo, /proc/stat 和  /proc/vmstat

例項5:檢視磁碟的讀/寫

命令:vmstat  -d

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

merged :表示一次來自於合併的寫/讀請求,一般系統會把多個連線/鄰近的讀/寫請求合併到一起來操作。

例項6:檢視 /dev/sda1磁碟的讀/寫

命令:vmstat  -p /dev/sda1

這些資訊主要來自於  /proc/diskstats

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

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

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

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

例項7:檢視系統的slab 資訊

命令:vmstat  -m

這組資訊來自於 /proc/slabinfo

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

每天乙個Linux命令

將我遇到的linux指令總結一下,不斷增加 1 sz和rz 一般來說,linux 伺服器大多是通過 ssh客戶端來進行遠端的登陸和管理的,使用 ssh登陸 linux ssh有關的兩個命令可以提供很方便的操作 sz 將選定的檔案傳送 send 到本地機器 rz 執行該命令會彈出乙個檔案選擇視窗,從本...

每天乙個linux命令

linux cmp命令 linux cmp命令用於比較兩個檔案是否有差異。當相互比較的兩個檔案完全一樣時,則該指令不會顯示任何資訊。若發現有所差異,缺省會標示出第乙個不同之處的字元和列數編號。若不指定任何檔名稱或是所給予的檔名為 則cmp指令會從標準輸入裝置讀取資料。語法cmp clsv i 字元數...

每天乙個 Linux 命令

head 與 tail 就像它的名字一樣的淺顯易懂,它是用來顯示開頭或結尾某個數量的文字區塊,head 用來顯示檔案的開頭至標準輸出中,而 tail 想當然爾就是看檔案的結尾。1 命令格式 head 引數 檔案 2 命令功能 head 用來顯示檔案的開頭至標準輸出中,預設head命令列印其相應檔案的...