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 伺服器記憶體監控與效能分析完整指南

編輯:Linux 教學

前言:記憶體管理的核心觀念

記憶體是 Linux 核心管理最關鍵的資源之一。由於物理記憶體總是有限,Linux 採用虛擬記憶體機制,利用磁碟(Swap)作為 RAM 的延伸,並透過「頁框回收」、「快取/緩衝區」等技術,讓系統看似擁有超過實體記憶體的可用空間。理解這些機制,是進行有效監控與調校的基礎。

一、即時監控記憶體使用狀況

1. free 指令——最基礎的查看工具

# free -h
              total        used        free      shared  buff/cache   available
Mem:           250M        188M         62M           0M         10M        171M
Swap:          512M          0B        512M
  • Mem 行:total 不含核心佔用;used 含快取;free 完全未使用;buff/cache 可隨時釋放。
  • Swap 行:若長期非零,代表物理記憶體壓力大。
  • 關鍵指標:available(新版 free 提供)才是真正可給新程序用的記憶體。

常用參數:-b/-k/-m/-g 指定單位;-s 2 每 2 秒更新一次;-h 人類可讀單位。

2. watch 搭配 free 持續監看

# watch -n 2 -d free -h
  • -n 2:每 2 秒執行一次。
  • -d:高亮顯示變動欄位。
  • 適合長時間觀察趨勢,Ctrl+C 結束。

二、虛擬記憶體機制深度解析

1. 六大核心機制

  1. 位址映射:邏輯位址 ↔ 實體位址(MMU + 頁表)。
  2. 記憶體分配/回收:Buddy System、Slab Allocator。
  3. 快取與刷新:Page Cache、Buffer Cache、pdflush/flusher 執行緒定期回寫。
  4. 缺頁中斷:進程訪問不在實體記憶體的頁面時觸發,核心負責從磁碟載入。
  5. 換出/換入:將閒置匿名頁面寫入 Swap,騰出實體頁框。
  6. 記憶體共享:Copy-on-Write、共享庫、tmpfs 等。

2. Swap 容量規劃建議

  • 舊說法「Swap = 2 × RAM」並非鐵律。
  • RAM ≥ 16 GB 且非休眠需求:4–8 GB 甚至 0 Swap(生產環境建議保留 2–4 GB 緩衝)。
  • 觀察 si/so(vmstat)長期為 0 即代表記憶體充足。

三、vmstat 綜合效能分析

# vmstat 5 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs  us sy id wa
 1  0  62792   3460   9116  88092    6   30   189    89 1061  569 17 28 54  2
 0  0  62792   3400   9124  88092    0    0     0    14  884  434  4 14 81  0
...

欄位解讀重點

區塊欄位含義警戒值
Procsr可執行佇列進程數> CPU 核心數 × 2–4 持續偏高
b等待 I/O 進程數持續 > 0 表示 I/O 瓶頸
Memoryswpd已用 Swap (KB)持續增長
free空閒記憶體 (KB)過低(< 5% total)
buffBuffer Cache (KB)—
cachePage Cache (KB)—
Swapsi從磁碟換入 (KB/s)持續 > 0 代表記憶體不足
so換出到磁碟 (KB/s)持續 > 0 同左
I/Obi寫入區塊裝置 (塊/秒)配合 wa 觀察
bo讀取區塊裝置 (塊/秒)—
Systemin中斷數/秒(含時鐘)異常高需查驅動
csContext Switch/秒高 cs + 高 sy 可能鎖競爭
CPUusUser 時間 %—
sySystem 時間 %持續 > 30% 需關注
idIdle %長期 < 40% 代表 CPU 壓力大
waI/O Wait %持續 > 20% 代表磁碟瓶頸

四、記憶體洩漏偵測與回收策略

1. 什麼是記憶體洩漏?

程式透過 malloc/new 申請堆疊記憶體後,未對應呼叫 free/delete 釋放,導致該記憶體區塊永不可再利用。長期運行的服務程式(Daemon)最易造成累積耗盡記憶體。

2. 偵測工具與方法

  • 觀察趨勢:top、ps v 監控特定 PID 的 RSS(Resident Set Size)持續上升。
  • 開發階段:valgrind --leak-check=full、mtrace (glibc hook)、AddressSanitizer (GCC/Clang -fsanitize=address)。
  • 生產環境:pmap -x 分析記憶體映射;/proc//smaps 詳細統計。

3. 緊急回收手段(治標不治本)

# 釋放 PageCache、dentries、inodes
# echo 3 > /proc/sys/vm/drop_caches

# 針對特定進程釋放記憶體(需 root,謹慎使用)
# kill -USR1    # 視程式是否實現 handler 釋放快取
# kill -9       # 強制終止,核心自動回收所有資源

警告:drop_caches 會暫時降低 I/O 效能;殺進程會中斷服務,務必先確認業務影響。

4. 程式碼層面預防

  • RAII(C++ 智慧指標)、Go/Rust 所有權機制、Java/Go GC。
  • 定期 Code Review、靜態分析、壓力測試長時間運行觀察 RSS。

五、進階監控建議

  • Prometheus + Node Exporter + Grafana:收集 node_memory_* 指標,設定告警(available < 10%、swap_used > 0)。
  • 核心參數調校:/proc/sys/vm/swappiness(預設 60,資料庫建議 1–10)、vfs_cache_pressure、min_free_kbytes。
  • 大頁面:資料庫/虛擬化負載啟用 HugePages 減少 TLB Miss。

總結

記憶體監控不只看「免費多少」,更要理解 buff/cache、Swap 活動、頁面回收機制。善用 free、vmstat、top/htop、/proc/meminfo 等工具,配合歷史趨圖與告警,才能在記憶體耗盡前精準介入,保障 Linux 伺服器長期穩定運行。

Copyright © Windows教程網 All Rights Reserved