Nossos servidores em produção, às vezes com carga, encontram o seguinte problema (Linux 4.10):
- O aplicativo que manipula o carregamento (servidor da Web) está sendo executado em alta carga.
- Um novo trabalho é iniciado (por exemplo, cron). Isso requer uma chamada de sistema clone (), que não aloca memória.
- O Kernel OOM killer é iniciado e mata um dos processos do aplicativo do servidor da Web, para que o novo trabalho possa ser iniciado.
- "free -m" mostra que a memória livre está criticamente baixa, cerca de 1-3 GB dos 64 GB no servidor. No entanto, a maior parte da memória está no cache de páginas.
- O sistema não possui nenhuma configuração de partição / arquivo de troca e o vm.swappiness está configurado para seu valor padrão de 60.
Em vez disso, se tivéssemos executado "echo 3 > / proc / sys / vm / drop_caches" antes do carregamento ser iniciado, o OOM não acabará com nosso aplicativo de servidor web e tudo funcionará bem.
Nas condições acima, o kernel não libera o cache de páginas antes de tentar matar um processo para liberar alguma memória?