Linux

為什麼我不能通過 /proc/sys/vm/drop_caches 釋放記憶體記憶體

  • September 29, 2020

今天我發現我的伺服器只有很少的可用記憶體。我執行free -h了,它顯示記憶體使用了 60G 記憶體。於是我執行命令釋放記憶體,結果如下:

$ free -h; sudo sync; echo 3 > sudo /proc/sys/vm/drop_caches; free -h
            total       used       free     shared    buffers     cached
Mem:          126G       114G        11G       5.6M       465M        60G
-/+ buffers/cache:        53G        72G
Swap:          75G       607M        74G
            total       used       free     shared    buffers     cached
Mem:          126G       114G        11G       5.6M       465M        60G
-/+ buffers/cache:        53G        72G
Swap:          75G       607M        74G

似乎根本沒有釋放任何記憶體,並且該伺服器上沒有虛擬機。為什麼?除了重啟伺服器(我的作業系統是 Debian 8),我應該怎麼做才能釋放記憶體?

謝謝!

/proc/sys/vm/drop_caches沒有任何操作目的。不要嘗試,只會損害性能。唯一實際的案例是用於基準測試的冷記憶體。

Cached 可用於應用程序,但 Linux 稱其為已使用。必填: https ://www.linuxatemyram.com/

為什麼你會花錢和精力在快速記憶體上,而不是用它來提升性能?

不會釋放記憶體的原因之一drop_caches是因為某些記憶體仍在使用中,例如tmpfs(記憶體中)文件系統。為了找出為這種東西分配了多少記憶體,您可以使用df實用程序:

df -t tmpfs --total -h

此命令將列印出目前使用的所有 tmpfs 的使用情況。-t tmpfs僅將列表限制為tmpfs系統,--total為列出的所有文件系統生成總計,並-h以人類可讀的格式格式化所有大小。

問題是,一些應用程序習慣性地創建臨時文件,打開它們然後刪除,而不關閉。結果,tmpfs 無法釋放記憶體,因為文件仍在使用中。為了找到這樣的應用程序,您可以使用以下命令:

lsof -nP +L1 /dev/shm | grep DEL

這將列出/dev/shm(常用系統tmpfs)中所有打開的已刪除文件,以及打開這些文件的應用程序。-nP是更快執行的優化,+L1限制連結計數並/dev/shm指定目錄以掃描打開的文件。然後, | grep DEL從列表中僅選擇已刪除的文件。

Chromium 是最流行的濫用/dev/shm其用途的軟體之一,因此,您可能會獲得由基於鉻或電子的應用程序創建的數 GB 已刪除文件。而且這個記憶體不會被刪除,drop_caches也不會在記憶體不足的情況下被釋放。

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