O assassino OOM mata o processo, embora o cache da página nunca seja despejado

O assassino OOM mata o processo, embora o cache da página nunca seja despejado

Nossos servidores em produção às vezes sob carga apresentam o seguinte problema (Linux 4.10):

  1. O aplicativo que manipula a carga (servidor web) está sendo executado com carga alta.
  2. Um novo trabalho é iniciado (por exemplo, cron). Isso requer uma chamada de sistema clone(), que não consegue alocar memória.
  3. O Kernel OOM killer é inicializado e encerra um dos processos do aplicativo do servidor web, para que o novo trabalho possa ser iniciado.
  4. "free -m" mostra que a memória livre está criticamente baixa, cerca de 1-3 GB dos 64 GB do servidor. No entanto, a maior parte da memória está no cache de páginas.
  5. O sistema não possui nenhuma configuração de partição/arquivo swap e vm.swappiness está definido com seu valor padrão de 60.

Em vez disso, se tivéssemos executado "echo 3> /proc/sys/vm/drop_caches" antes do início do carregamento, o OOM não acabaria matando nosso aplicativo de servidor web e tudo funcionaria bem.

Nas condições acima, o kernel não libera o cache da página antes de tentar encerrar um processo para liberar memória?

informação relacionada