vmstat的使用

XXLLA發表於2024-11-14

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 版本資訊。

例子:

vmstat的使用

欄位說明: Procs(程序):
r: 執行的和等待(CPU 時間片)執行的程序數,這個值也可以判斷是否需要增加 CPU(長期大於 1) b: 等待 IO 的程序數量,處於不可中斷狀態的程序數,常見的情況是由 IO 引起的
Memory(記憶體):
swpd: 使用虛擬記憶體大小,切換到交換記憶體上的記憶體(預設以 KB 為單位)
如果 swpd 的值不為 0,或者還比較大,比如超過 100M 了,但是 si, so 的值長期為 0,這種情況我 們可以不用擔心,不會影響系統效能。 free: 空閒的實體記憶體 buff: 用作緩衝的記憶體大小 cache: 用作快取的記憶體大小,檔案系統的 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 版本塊的大小為 1024bytes)
bi: 每秒讀取的塊數,從塊裝置讀入的資料總量(讀磁碟) (KB/s) bo: 每秒寫入的塊數,寫入到塊裝置的資料總理(寫磁碟) (KB/s)
隨機磁碟讀寫的時候,這 2 個值越大(如超出 1M),能看到 CPU 在 IO 等待的值也會越大
system:
in: 每秒中斷數,包括時鐘中斷。 cs: 每秒上下文切換數。
上面這 2 個值越大,會看到由核心消耗的 CPU 時間會越多 CPU(以百分比表示):
us: 使用者程序消耗的 CPU 時間百分比,us 的值比較高時,說明使用者程序消耗的 CPU 時間多,但是如 果長期超過 50% 的使用,那麼我們就該考慮最佳化程式演算法或者進行加速了 sy: 核心程序消耗的 CPU 時間百分比,sy 的值高時,說明系統核心消耗的 CPU 資源多,這並不是良 性的表現,我們應該檢查原因。 id: CPU 處在空閒狀態時間百分比(包括 IO 等待時間) wa: IO 等待消耗的 CPU 時間百分比,wa 的值高時,說明 IO 等待比較嚴重,這可能是由於磁碟大量 作隨機訪問造成,也有可能是磁碟的頻寬出現瓶頸(塊操作)。

顯示活躍和非活躍記憶體

vmstat的使用

使用-a 選項顯示活躍和非活躍記憶體時,所顯示的內容除增加 inact 和 active 外,其他顯示內容與例子 1
相同。
欄位說明: Memory(記憶體):
inact: 非活躍記憶體大小(當使用-a 選項時顯示) active: 活躍的記憶體大小(當使用-a 選項時顯示)
注:如果 r 經常大於 4,且 id 經常少於 40,表示 cpu 的負荷很重,如果 bi,bo 長期不等於 0,表示內 存不足,如果 disk 經常不等於 0,且在 b 中的佇列大於 3,表示 io 效能不好。
CPU 問題現象: 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 時間和一些後臺的程式,釋放記憶體的佔用