Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> 關於 Linux

Linux vmstat 命令全解析:虛擬記憶體與系統效能監控實戰

編輯:關於 Linux

vmstat(Virtual Memory Statistics)是 Linux 系統效能分析的「瑞士軍刀」。它以極低開銷提供進程、記憶體、交換、I/O、系統中斷與 CPU 等全方位統計,是高負載伺服器排查瓶頸的首選工具。本文將從虛擬記憶體原理切入,深度解析 vmstat 輸出欄位,並提供實戰分析模型。

核心概念:物理記憶體 vs 虛擬記憶體

為什麼需要虛擬記憶體?

物理記憶體(RAM)容量有限且昂貴,而程式執行所需位址空間往往超過物理上限。虛擬記憶體利用磁碟空間(Swap 分區/檔案)作為邏輯延伸,讓系統能運行更大、更多程式。

Linux 記憶體管理關鍵機制

  1. 分頁機制:記憶體以「頁」(通常 4KB)為單位管理。核心依據 LRU(最近最少使用)演算法,將不活躍頁面換出至 Swap,釋放物理記憶體給熱點數據。
  2. 主動回收:即使記憶體尚未耗盡,核心也會提前將暫時不用的頁面換出,避免臨時回收造成延遲。
  3. 換入/換出:
    • Page Out:頁面寫入磁碟(釋放物理記憶體)。
    • Page In:從磁碟讀回頁面。
    • Page Fault:進程訪問不在物理記憶體的頁面,觸發核心處理缺頁中斷。
  4. Thrashing(顛簸):當 Page Out 頻繁到核心花在管理分頁的時間超過執行程式時間,系統陷入假死、效能崩潰。

命令語法與參數詳解

vmstat [選項] [延遲秒數 [次數]]
參數功能
-a顯示活躍/非活躍記憶體統計
-f顯示開機至今 fork 總數
-m顯示 slabinfo(核心快取分配器統計)
-n僅在開頭顯示一次欄位標題
-s顯示詳細記憶體/系統活動統計表(單次輸出)
-d顯示磁碟統計資訊
-p 分區顯示指定磁碟分區統計
-S 單位指定顯示單位:k(1000) K(1024) m(1000000) M(1048576),預設 K
delay採樣間隔(秒),不指定則只輸出一次平均值
count採樣次數,指定 delay 但不指定 count 則無限循環

經典輸出格式深度解讀

[root@localhost ~]# vmstat 5 3
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs  us  sy  id  wa  st
 1  0      0 3029876 199616 690980    0    0     0     2    3    2   0   0 100   0   0
 0  0      0 3029752 199616 690980    0    0     0    41 1009   39   0   0 100   0   0
 0  0      0 3029752 199616 690980    0    0     0     3 1004   36   0   0 100   0   0

欄位分組詳細說明

Procs(進程隊列)

  • r:運行隊列中等待 CPU 的進程數(含正在運行)。長期 > CPU 核心數 × 2~3 表示 CPU 壓力大。
  • b:不可中斷睡眠狀態進程數(通常等待 I/O)。持續非零暗示 I/O 瓶頸。

Memory(記憶體,單位預設 KB)

  • swpd:已使用的 Swap 空間。
  • free:空閒物理記憶體。
  • buff:Block Device 緩衝區大小(元數據)。
  • cache:Page Cache 大小(檔案內容快取)。

Swap(交換活動,單位:塊/秒,塊=1024B)

  • si:每秒從 Swap 讀入記憶體(換入)。
  • so:每秒寫入 Swap 的記憶體(換出)。
    核心判斷:si/so 長期非零 → 物理記憶體嚴重不足。

IO(塊設備 I/O,單位:塊/秒)

  • bi:每秒讀取塊數(含從磁碟讀入快取)。
  • bo:每秒寫入塊數(含快取回寫磁碟)。

System(系統活動)

  • in:每秒中斷數(含時鐘中斷)。高值可能因高頻網卡/時鐘/設備驅動。
  • cs:每秒上下文切換數。cs 高於 10,000~20,000 通常意味著進程/線程過多或鎖競爭激烈。

CPU(百分比,總和 = 100%)

  • us:用戶態佔用(應用程式碼)。
  • sy:系統態佔用(核心/系統調用)。sy 持續 > 30%~40% 需檢查系統調用或鎖競爭。
  • id:空閒(含 I/O 等待)。
  • wa:I/O 等待佔用。wa 持續 > 20%~30% 明確指向 I/O 子系統瓶頸。
  • st:虛擬機被 Hypervisor 偷走的 CPU 時間(僅虛擬化環境相關)。

實戰分析模型:三步診斷法

1. 看 CPU:us/sy/id/wa 平衡

  • CPU 繁忙:id 長期 < 10%,us 高 → 應用優化;sy 高 → 系統調用/鎖優化。
  • I/O 瓶頸:wa 高,b 非零,bi/bo 大 → 磁碟/檔案系統/資料庫優化。

2. 看記憶體:swpd/si/so

  • swpd 穩定、si/so = 0 → 記憶體充足。
  • si/so 頻繁非零 → 立即擴充物理記憶體或優化應用記憶體佔用。

3. 看負載:r 值與 cs

  • r > 核心數 × 2 且 cs 高 → 並發過高,考慮限流/連接池/異步化。

進階用法範例

持續監控並記錄(每 10 秒採樣 100 次)

vmstat 10 100 | tee vmstat_$(date +%F_%H%M).log

查看詳細記憶體統計(單次)

vmstat -s

分析特定磁碟分區 I/O

vmstat -p /dev/sda1 5

查看 Slab 分配器資訊(排查核心記憶體洩漏)

vmstat -m | head -20

vmstat命令輸出示例

vmstat 以輕量、全面、即時的特性,成為 Linux 效能分析的基石。熟練解讀其輸出,結合 iostat、pidstat、perf 等工具,可快速定位 80% 以上的系統效能問題。建議管理員建立常態基準線,異常時快速比對,精準施策。

Copyright © Windows教程網 All Rights Reserved