為什麼 drop_caches 會增加“可用”內存

為什麼 drop_caches 會增加“可用”內存

我在管理的 proxmox 7 節點上遇到記憶體不足的問題。當閱讀類似問題時,我被引導至 linuxatemyram.com,閱讀此頁面後,我開始監視「可用」記憶體而不是「已使用」記憶體。但問題仍然存在(可用記憶體隨著正常運行時間的增加而減少)。

然後我發現我可以透過發出命令來強制釋放 Linux 快取echo 3 > /proc/sys/vm/drop_caches。我原本期望看到「已使用」記憶體變得空閒,但我沒想到「可用」記憶體會增加,因為據我了解,可用記憶體也被認為已使用,因為它被 Linux 用於快取。

但是 drop_caches 之後「可用」記憶體增加了,如下所示:

root@proxmox13:~$ free -h
               total        used        free      shared  buff/cache   available
Mem:            31Gi        29Gi       1.1Gi        67Mi       258Mi       977Mi
Swap:             0B          0B          0B
root@proxmox13:~$ echo 2 > /proc/sys/vm/drop_caches
root@proxmox13:~$ free -h
               total        used        free      shared  buff/cache   available
Mem:            31Gi        26Gi       4.1Gi        67Mi       205Mi       3.9Gi
Swap:             0B          0B          0B

為什麼增加了?如果釋放的記憶體用於緩存,為什麼之前不認為它可用?

感謝您的幫助。

答案1

在高水準上,可用是免費的快取和其他易於回收的東西,以方便人類。https://www.linuxatemyram.com/使用可用的嘗試來解釋正在發生的事情。對於不包括空閒的各種緩存,還存在其他計數器。

事實上,Linux VMM 是複雜而混亂的。記憶體使用量很少能與簡單的統計完全相加。我認為Cached in /proc/meminfo 表示頁面緩存但你也放棄了目錄項目和索引節點。所以free中的buff/cache並沒有太大變化。如果您需要深入研究核心物件的細節,請嘗試使用slabtop。

從容量規劃的角度來看,32 個可用 GB 中的 1 GB 並不算多。考慮減少每個 VM 主機的來賓數量,或增加實體記憶體。

不要使用/proc/sys/vm/drop_caches它,因為刪除快取和從磁碟重新讀取資料可能會損害效能。這是為了冷儲存效能測試,當人們懶得重啟主機時。

說到重新啟動,程式不必洩漏記憶體來緩慢減少可用記憶體。 VM 主機和內部的來賓可能正在運行數千個任務,其中一些任務保持運行並保留各種記憶體分配。您應該每隔幾個月重新啟動一次以進行軟體更新,因此只要「洩漏」很慢,就可能不值得詳細調查。

透過查看以下內容來改善您的記憶體監控壓力失速資訊。我真正關心的指標是任務是否因記憶體不足而停滯,PSI 會對此進行追蹤。

相關內容