我們的生產伺服器有時在負載下會遇到以下問題(Linux 4.10):
- 處理負載的應用程式(網頁伺服器)正在高負載下運行。
- 一個新的工作開始(例如 cron)。這需要一個clone()系統調用,它無法分配記憶體。
- 核心 OOM 殺手啟動,並終止其中一個 Web 伺服器應用程式進程,以便新作業可以啟動。
- 「free -m」顯示可用記憶體非常低,伺服器上的 64GB 大約只有 1-3GB。然而,大部分記憶體都在頁快取中。
- 系統沒有任何交換分區/檔案設置,並且 vm.swappiness 設定為預設值 60。
相反,如果我們在加載開始之前運行“echo 3 > /proc/sys/vm/drop_caches”,OOM 最終不會終止我們的 Web 伺服器應用程序,並且一切正常。
在上述條件下,核心在嘗試殺死進程以釋放一些記憶體之前是否不會釋放頁面快取?