Linux

為什麼 Red Hat Linux 報告系統上的可用記憶體少於實際可用記憶體?

  • November 17, 2009

我有一個相對較小的家用 Red Hat Linux 伺服器(大約 8 GB RAM)。除了執行一些本地開發的應用程序來跟踪各種事情之外,我不會使用它。在盒子上執行的唯一真實的東西是一個數據庫和一個網路伺服器。

我注意到,當使用 NMON 和 TOP 等工具檢查系統計數器時,系統總可用記憶體相對較低(大約幾百 MB),而數據庫和 Web 伺服器的活動記憶體仍然很低(僅共消耗 3 GB)。即使包括所有其他正在執行的程序,總消耗的記憶體也小於 4 GB。

為什麼 Red Hat Linux 報告的可用記憶體少於總記憶體減去正在執行的程序已用記憶體的總和?

不要將空閒記憶體與未使用記憶體混淆。空閒記憶體,在 unix 世界中是一頁物理記憶體,沒有映射到它的邏輯數據。未使用的記憶體確實有一些數據映射到它,但它目前沒有被正在執行的程序主動使用。

% free -m
            total       used       free     shared    buffers     cached
Mem:           997        942         55          0         71        366
-/+ buffers/cache:        504        492
Swap:         2015        618       1397

Linux(和所有 Unix 作業系統)盡量減少可用記憶體。相反,它們使用未主動映射到正在執行的作業系統中的程序的記憶體,用於文件記憶體和各種 IO 傳輸操作的緩衝區。

其他可能讓您感到困惑的事情是您不能簡單地將所有正在執行的程序正在使用的記憶體相加來獲得總記憶體在使用中的數字。如果您嘗試這樣做,您會很快發現您的應用程序使用的記憶體似乎比機器上實際存在的記憶體要多。這有兩個原因

  1. 通過Copy-On-Write記憶體分配、記憶體映射 IO共享動態庫,可以在各個程序之間共享記憶體。
  2. 作業系統可以自由地向應用程序承諾比它實際提供的更多的記憶體。理論上,大多數應用程序編寫者更喜歡一次性請求大量記憶體,以避免成本,並且實際上可能不會使用所有這些記憶體。

最近在lwn.net 上有一篇文章討論了這個問題

引用自:https://serverfault.com/questions/9442