OOM Killer mata el proceso aunque el caché de la página nunca se desaloja

OOM Killer mata el proceso aunque el caché de la página nunca se desaloja

Nuestros servidores en producción a veces bajo carga se encuentran con el siguiente problema (Linux 4.10):

  1. La aplicación que maneja la carga (servidor web) se está ejecutando con una carga alta.
  2. Se inicia un nuevo trabajo (por ejemplo, cron). Esto requiere una llamada al sistema clone(), que no logra asignar memoria.
  3. Kernel OOM Killer se inicia y finaliza uno de los procesos de la aplicación del servidor web, para que pueda comenzar el nuevo trabajo.
  4. "free -m" muestra que la memoria libre es críticamente baja, alrededor de 1 a 3 GB de los 64 GB del servidor. Sin embargo, la mayor parte de la memoria está en la caché de páginas.
  5. El sistema no tiene ninguna configuración de archivo/partición de intercambio y vm.swappiness está configurado en su valor predeterminado de 60.

En cambio, si hubiéramos ejecutado "echo 3 > /proc/sys/vm/drop_caches" antes de que comience la carga, OOM no termina matando nuestra aplicación de servidor web y todo funciona bien.

Bajo las condiciones anteriores, ¿el kernel no libera la memoria caché de la página antes de intentar finalizar un proceso para liberar algo de memoria?

información relacionada