Ubuntu

記憶體是空閒的,但仍在交換?

  • June 11, 2013

我確信這是一個非常基本的問題,但我只是想了解我的 Ubuntu Hardy 伺服器執行基於 Rails 的站點的情況。似乎我有可用記憶體,但係統報告它仍在交換記憶體(除非我讀錯了?)。

這是free -m輸出

             total       used       free     shared    buffers     cached
Mem:          1024        905        118          0         33        409
-/+ buffers/cache:        462        561
Swap:         2047         95       1952

誰能向我解釋一些可能的原因,即它始終保持 95MB 的交換空間(永遠不會少)?我只是在尋找一些關於我可以檢查的東西的線索,這些線索可以準確地向我解釋 Linux 中記憶體的使用方式。

我在 Ted Ts’o 教授的課程中接受培訓,當我問同樣的問題時,他向我解釋的方式是這樣的……

預設情況下,核心保留大部分記憶體用於記憶體文件系統元數據等內容。這就是您的“已使用”列顯示 905MB 的原因。那是“使用”的總記憶體,即程序和記憶體的意思。實際可用記憶體量位於“free”列下,“-/+ buffers/cache”旁邊,即 561MB。這是可供程序使用的數量。

現在,由於核心有 462MB 用於記憶體,所以剩下 118MB 完全可用。當一個程序對核心說“嘿,我現在需要 50MB 記憶體!”時,核心會從這個“空閒”池中提取記憶體。這使得“空閒”池大約為 68MB,這對於舒適來說太小了,因此在提取該記憶體之後,儲存在記憶體中的內容量減少了,“空閒”池又恢復了。

但是如果一個程序是個豬,並且說“我現在需要 120MB 的記憶體!”會發生什麼。你沒有那麼多的“空閒”記憶體,所以核心不能把它給程序,即使是暫時的,所以核心深入交換,只要足夠長的時間來分配足夠的空閒記憶體來給程序它需要的東西,然後釋放足夠的記憶體數據以允許“空閒”記憶體回到舒適的水平。

通過結算過程,即使是記憶體數據,swap 中的數據也不會立即從 swap 中釋放出來。唯一會使用交換記憶體的情況是,如果有東西請求儲存在那個小交換段中的元數據(或任何記憶體的資訊)。所以離開它並沒有什麼壞處。

如果它困擾你,你可以執行 ‘swapoff’ 然後 ‘swapon’ 來擺脫它,但它不會傷害任何東西。

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