Linux監控工具vmstat命令詳解

2022-08-16 16:45:14 字數 4513 閱讀 1678

一、前言

二、虛擬記憶體原理

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

分頁(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:只在開始時顯示一次各欄位名稱。

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

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

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

-s:使用指定單位顯示。引數有 k 、k 、m 、m ,分別代表1000、1024、1000000、1048576位元組(byte)。預設單位為k(1024 bytes)

-v:顯示vmstat版本資訊。

2.使用說明

例子1:每3秒輸出一條結果

字段說明:

procs(程序):

r: 執行佇列中程序數量,這個值也可以判斷是否需要增加cpu。(長期大於1)

b: 等待io的程序數量

memory(記憶體):

swpd: 使用虛擬記憶體大小

注意:如果swpd的值不為0,但是si,so的值長期為0,這種情況不會影響系統效能。

free: 空閒物理記憶體大小

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

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

注意:如果cache的值大的時候,說明cache處的檔案數多,如果頻繁訪問到的檔案都能被cache處,那麼磁碟的讀io bi會非常小。

swap:

si: 每秒從交換區寫到記憶體的大小,由磁碟調入記憶體

so: 每秒寫入交換區的記憶體大小,由記憶體調入磁碟

注意:記憶體夠用的時候,這2個值都是0,如果這2個值長期大於0時,系統效能會受到影響,磁碟io和cpu資源都會被消耗。有些朋友看到空閒記憶體(free)很少的或接近於0時,就認為記憶體不夠用了,不能光看這一點,還要結合si和so,如果free很少,但是si和so也很少(大多時候是0),那麼不用擔心,系統效能這時不會受到影響的。

io:(現在的linux版本塊的大小為1kb)

bi: 每秒讀取的塊數

bo: 每秒寫入的塊數

注意:隨機磁碟讀寫的時候,這2個值越大(如超出1024k),能看到cpu在io等待的值也會越大。

系統:

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

cs: 每秒上下文切換數。

注意:上面2個值越大,會看到由核心消耗的cpu時間會越大。

cpu(以百分比表示):

us: 使用者程序執行時間百分比(user time)

注意: us的值比較高時,說明使用者程序消耗的cpu時間多,但是如果長期超50%的使用,那麼我們就該考慮優化程式演算法或者進行加速。

sy: 核心系統程序執行時間百分比(system time)

注意:sy的值高時,說明系統核心消耗的cpu資源多,這並不是良性表現,我們應該檢查原因。

wa: io等待時間百分比

注意:wa的值高時,說明io等待比較嚴重,這可能由於磁碟大量作隨機訪問造成,也有可能磁碟出現瓶頸(塊操作)。

id: 空閒時間百分比

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

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

字段說明:

memory(記憶體):

inact: 非活躍記憶體大小(當使用-a選項時顯示)

active: 活躍的記憶體大小(當使用-a選項時顯示)

總結:

目前說來,對於伺服器監控有用處的度量主要有:

r(執行佇列)

pi(頁匯入)

us(使用者cpu)

sy(系統cpu)

id(空閒)

注意:如果r經常大於4 ,且id經常少於40,表示cpu的負荷很重。如果bi,bo 長期不等於0,表示記憶體不足。

通過vmstat識別cpu瓶頸:

r(執行佇列)展示了正在執行和等待cpu資源的任務個數。當這個值超過了cpu數目,就會出現cpu瓶頸了。

linux下檢視cpu核心數的命令:

cat /proc/cpuinfo|grep processor|wc -l

當r值超過了cpu個數,就會出現cpu瓶頸,解決辦法大體幾種:

1. 最簡單的就是增加cpu個數和核數

2. 通過調整任務執行時間,如大任務放到系統不繁忙的情況下進行執行,進爾平衡系統任務

3. 調整已有任務的優先順序

通過vmstat識別cpu滿負荷:

首先需要宣告一點的是,vmstat中cpu的度量是百分比的。當us+sy的值接近100的時候,表示cpu正在接近滿負荷工作。但要注意的是,cpu 滿負荷工作並不能說明什麼,linux總是試圖要cpu盡可能的繁忙,使得任務的吞吐量最大化。唯一能夠確定cpu瓶頸的還是r(執行佇列)的值。

通過vmstat識別ram瓶頸:

資料庫伺服器都只有有限的ram,出現記憶體爭用現象是oracle的常見問題。

首先用free檢視ram的數量:

[oracle@oracle-db02 ~]$ free

total       used       free     shared    buffers     cached

mem:       2074924    2071112       3812          0      40616    1598656

-/+ buffers/cache:     431840    1643084

swap:      3068404     195804    2872600

當記憶體的需求大於ram的數量,伺服器啟動了虛擬記憶體機制,通過虛擬記憶體,可以將ram段移到swap disk的特殊磁碟段上,這樣會 出現虛擬記憶體的頁匯出和頁匯入現象,頁匯出並不能說明ram瓶頸,虛擬記憶體系統經常會對記憶體段進行頁匯出,但頁匯入操作就表明了伺服器需要更多的記憶體了, 頁匯入需要從swap disk上將記憶體段複製回ram,導致伺服器速度變慢。

解決的辦法有幾種:

1. 最簡單的,加大ram;

2. 改小sga,使得對ram需求減少;

3. 減少ram的需求。(如:減少pga)

linux監控工具vmstat使用

vmstat是乙個檢視虛擬記憶體 virtual memory 使用狀況的工具,使用vmstat命令可以得到關於程序 記憶體 記憶體分頁 堵塞io traps及cpu活動的資訊。本文介紹了虛擬記憶體的執行原理,繼而介紹了vmstat的用法和使用範例。一 虛擬記憶體執行原理 在系統中執行的每個程序都需...

vmstat監控工具 借鑑

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

Linux系統監控工具之vmstat詳解

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