Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學

深入解讀 Linux free 命令輸出:記憶體真相在這裡

編輯:Linux 系統常見問題解答

free 是 Linux 系統管理員最常用的記憶體檢視工具,但其輸出中的「buffers/cache」兩行常讓人困惑。本文以實際輸出為例,拆解每一欄含義,釐清 OS 視角與應用程式視角的差異。

輸出樣例與矩陣標記

為了方便說明,將輸出視為二維陣列 FO[行][列](行從 1 起算,列從 1 起算)。實際輸出共四行:

             total       used       free     shared    buffers     cached
Mem:      15402628   15318812      83816          0     123456    12033012
-/+ buffers/cache:  15318812   15402628
Swap:           0          0          0

free命令輸出示例

第四行:Swap 交換區

直觀易懂:total 總量、used 已用、free 剩餘。

第一行:OS 視角的物理記憶體

  • FO[2][1] (total) = 15402628 KB:物理記憶體總量。
  • FO[2][2] (used) = 15318812 KB:OS 認為已被佔用(含 buffers/cache)。
  • FO[2][3] (free) = 83816 KB:OS 認為完全閒置的記憶體。

等式 1: FO[2][1] = FO[2][2] + FO[2][3]

shared (第 4 列) 已棄用,通常為 0。buffers (第 5 列) 為待寫入磁塊裝置的資料;cached (第 6 列) 為從磁碟讀取並暫存的資料。兩者皆由核心管理,旨在提升 I/O 效能。

第二行:應用程式視角的可用記憶體

這行才是開發者、運維真正關心的「還能申請多少記憶體」。

  • FO[3][2] (-buffers/cache) = FO[2][2] - FO[2][5] - FO[2][6]:扣除 buffers/cache 後,應用程式實際佔用量。
  • FO[3][3] (+buffers/cache) = FO[2][3] + FO[2][5] + FO[2][6]:應用程式可申請的實際可用量(含可快速回收的緩衝/快取)。

因此 FO[3][3] » FO[2][3],這就是為什麼「free 顯示剩餘很少」但系統仍能跑新程式的原因。

實驗驗證 Cache 效能

# 釋放頁面快取
echo 3 > /proc/sys/vm/drop_caches
# 讀取大文件兩次,第二次會快數倍(如 BerkeleyDB 讀 5G 快 9 倍)

資料來源

free 由 procps 套件提供,所有數值源自 /proc/meminfo。可下載 procps 原始碼(最新 3.2.8)查看具體解析實現。

Copyright © Windows教程網 All Rights Reserved