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 教學

虛擬記憶體管理是 Linux 核心最複雜的子系統之一。本文聚焦與效能監測直接相關的兩個核心執行緒 kswapd 與 pdflush,並透過 vmstat 實戰解讀記憶體壓力指標。

核心記憶體管理執行緒

1. kswapd:頁面回收守護進程

  • 監控 pages_high、pages_low、pages_min 三個水位線
  • 可用記憶體 < pages_low 時喚醒,掃描並釋放 32 頁為單位,直到 > pages_high
  • 掃描三類頁面處理邏輯:
    1. 未修改 (Clean) → 直接放入可用清單
    2. 檔案系統修改 (Dirty, file-backed) → 寫回磁碟 (writeback)
    3. 匿名頁修改 (Anonymous dirty) → 寫入 Swap 區

2. pdflush (舊核心) / flush-x (新核心) : 髒頁回寫

  • 負責將檔案系統相關的髒頁定期回寫磁碟
  • 觸發條件由 vm.dirty_background_ratio (預設 10%) 與 vm.dirty_ratio (預設 20%) 控制
  • 查看參數:sysctl vm.dirty_background_ratio

vmstat 關鍵欄位深度解讀


# vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs  us sy id wa st
 0  3 252696   2432    268   7148 3604 2368  3608  2372  288  288   0  0 21 78  1
 0  2 253484   2216    228   7104 5368 2976  5372  3036  930  519   0  0  0 100  0
欄位含義異常判讀
swpd已用 Swap 大小 (KB)持續增長 = 記憶體嚴重不足
free空閒實體記憶體 (KB)長期極低 = 系統處於記憶體壓力
buffBlock I/O 緩衝區 (KB)穩步下降 = kswapd 正從這裡借用記憶體
cache頁面快取 (KB)包含檔案快取,可被回收
siSwap in (KB/s) - 從 Swap 讀入持續 > 0 = 頻繁換頁讀取,效能嚴重下降
soSwap out (KB/s) - 寫入 Swap持續 > 0 = 記憶體不足被迫換出
biBlock in (磁碟塊讀入, blocks/s)含檔案讀取與 Swap 讀入
boBlock out (磁碟塊寫出, blocks/s)含檔案寫回與 Swap 寫出
r可執行行程數 (含正在跑)長期 > CPU 核心數 = CPU 飽和
b不可中斷睡眠行程數 (通常等 I/O)> 0 = I/O 瓶頸
waCPU 等待 I/O 百分比高 = 磁碟子系統跟不上

實戰案例分析:記憶體壓力導致大量 Swap

觀察上述輸出:

  1. free 維持極低 (~2-3 MB),系統維持在最小可用記憶體邊緣
  2. swpd 持續增長 (252M → 262M),so (Swap out) 持續發生
  3. buff 從 268 降至 128,kswapd 正侵佔 buffer 空間
  4. wa (I/O wait) 高達 78-100%,CPU 大部分時間在等磁碟

結論:系統實體記憶體嚴重不足,觸發 vm.dirty_background_ratio=10% 導致 pdflush/kswapd 瘋狂回寫髒頁與換出匿名頁,磁碟 I/O 成為瓶頸,整體效能崩潰。

調優建議

  • 增加實體記憶體:根治之道
  • 調整 Swappiness:sysctl vm.swappiness=10 (預設 60),降低主動換出傾向
  • 調整髒頁比例:vm.dirty_background_ratio=5, vm.dirty_ratio=10,更積極回寫,避免瞬間大量 I/O
  • 使用 SSD/NVMe 做 Swap:大幅降低換頁延遲
  • 啟用 zswap/zram:記憶體中壓縮 Swap,減少磁碟 I/O
  • 應用層優化:檢查記憶體洩漏、減少緩存佔用、分頁處理大數據

總結

vmstat 是診斷記憶體壓力的「聽診器」。關鍵在於觀察 si/so 持續非零、wa 高、free 長期極低 三大鐵律。理解 kswapd/pdflush 機制,才能從根源解決 Swap 暴增問題,而非單純調大 Swap 分區。

Copyright © Windows教程網 All Rights Reserved