為什麼我不能通過 /proc/sys/vm/drop_caches 釋放記憶體記憶體
今天我發現我的伺服器只有很少的可用記憶體。我執行
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
也不會在記憶體不足的情況下被釋放。