OOM 殺手會殺死進程,但頁面快取永遠不會被驅逐

OOM 殺手會殺死進程,但頁面快取永遠不會被驅逐

我們的生產伺服器有時在負載下會遇到以下問題(Linux 4.10):

  1. 處理負載的應用程式(網頁伺服器)正在高負載下運行。
  2. 一個新的工作開始(例如 cron)。這需要一個clone()系統調用,它無法分配記憶體。
  3. 核心 OOM 殺手啟動,並終止其中一個 Web 伺服器應用程式進程,以便新作業可以啟動。
  4. 「free -m」顯示可用記憶體非常低,伺服器上的 64GB 大約只有 1-3GB。然而,大部分記憶體都在頁快取中。
  5. 系統沒有任何交換分區/檔案設置,並且 vm.swappiness 設定為預設值 60。

相反,如果我們在加載開始之前運行“echo 3 > /proc/sys/vm/drop_caches”,OOM 最終不會終止我們的 Web 伺服器應用程序,並且一切正常。

在上述條件下,核心在嘗試殺死進程以釋放一些記憶體之前是否不會釋放頁面快取?

相關內容