OOM キラーは、ページ キャッシュが削除されないにもかかわらずプロセスを強制終了します。

OOM キラーは、ページ キャッシュが削除されないにもかかわらずプロセスを強制終了します。

運用中のサーバーでは、負荷がかかると次の問題が発生することがあります (Linux 4.10)。

  1. 負荷を処理するアプリケーション (Web サーバー) が高負荷で実行されています。
  2. 新しいジョブが開始されます (例: cron)。これには clone() システム コールが必要ですが、メモリの割り当てに失敗します。
  3. カーネル OOM キラーが起動し、Web サーバーのアプリケーション プロセスの 1 つを強制終了して、新しいジョブを開始できるようにします。
  4. 「free -m」は、サーバーの 64 GB のうち、空きメモリが 1 ~ 3 GB 程度と非常に少ないことを示しています。ただし、メモリの大部分はページ キャッシュにあります。
  5. システムにはスワップ パーティション/ファイルの設定がなく、vm.swappiness はデフォルト値の 60 に設定されています。

代わりに、ロードが開始される前に「echo 3 > /proc/sys/vm/drop_caches」を実行しておけば、OOM によって Web サーバー アプリケーションが強制終了されることはなく、すべて正常に動作します。

上記の条件下では、カーネルはプロセスを強制終了してメモリを解放する前にページ キャッシュを解放しないのでしょうか?

関連情報