OOM killer
O OOM (out-of-memory) killer é a parte do kernel do Linux que encerra um processo quando o sistema fica sem memória e não consegue liberar nenhuma. Ele escolhe o processo pela sua pontuação OOM, geralmente aquele que está usando mais memória. O log do kernel registra cada encerramento por OOM.
1Como a vítima é escolhida
Cada processo tem uma pontuação em /proc/<pid>/oom_score que aumenta com o uso de memória. O arquivo /proc/<pid>/oom_score_adj, de -1000 a 1000, faz o ajuste; -1000 significa que o processo nunca será escolhido.
2Encontrando encerramentos por OOM
O kernel escreve 'Out of memory: Killed process' em seu log. journalctl -k | grep -i oom ou dmesg | grep -i oom exibem essas mensagens, com o nome do processo e seu uso de memória.
3Prevenção
Adicione memória ou swap, limite serviços que consomem muita memória ou defina limites por serviço com opções do systemd, como MemoryMax=. Algumas distribuições também executam o systemd-oomd, que atua mais cedo com base na pressão de memória.
Como investigar um encerramento por OOM
- Pesquise no log do kernel:
journalctl -k | grep -i -A5 'out of memory' - Anote o processo encerrado e seu tamanho de memória.
- Verifique a memória e o swap atuais:
free -h - Encontre os maiores processos:
ps aux --sort=-rss | head - Adicione swap ou limite o serviço e observe se o problema ocorre novamente.
Cuidados
- Definir o oom_score_adj como -1000 para muitos processos pode deixar o kernel sem uma escolha segura.
- Desativar a proteção contra overcommit de memória sem compreendê-la pode causar falhas em outros lugares.
Artigos relacionados
- Espaço de swap no LinuxO que é swap, como visualizá-lo com free e swapon, como adicionar um arquivo de swap e o que as alterações em vm.swappiness fazem.
- Média de cargaO que significam os três números da média de carga, como eles se relacionam com os núcleos da CPU e quando uma carga alta é um problema.
- journalctl e o journal do systemdComo ler logs com journalctl, verificar quanto espaço o journal utiliza e reduzi-lo com segurança usando as opções --vacuum.
Fontes
- Página de manual proc(5): oom_score e oom_score_adj man7.org
- Gerenciamento de Out Of Memory (kernel.org) kernel.org
Observação: O RainServer oferece monitoramento e limpeza segura para servidores Linux; ele mostra o que será alterado e solicita confirmação antes.
Última revisão: