
我在管理的 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 會對此進行追蹤。