OOM Killer no Linux: Por que o MySQL é morto e como evitar

oom killer

O que é o OOM Killer no Linux?

O OOM Killer Linux (Out Of Memory Killer) é um mecanismo do Linux kernel que entra em ação quando a memória RAM do servidor se esgota completamente.

Quando não há mais memória disponível para alocação, o kernel precisa liberar recursos imediatamente. Para isso, ele seleciona e finaliza um processo com base em um cálculo chamado OOM Score.

Na prática: ele “mata” um processo para impedir que o sistema inteiro trave.


Por que o OOM Killer mata o MySQL?

Serviços de banco de dados como:

  • MySQL
  • MariaDB

costumam consumir muita memória RAM — principalmente em ambientes com WordPress, múltiplos sites ou tráfego elevado.

O processo mysqld frequentemente recebe um OOM Score alto porque:

  • Usa muita memória residente (RSS)
  • Possui buffers grandes configurados
  • Mantém múltiplas conexões abertas

Quando a RAM acaba, o banco vira um alvo provável.


Como identificar se o OOM Killer foi acionado

1️⃣ Verifique os logs do kernel

dmesg -T | grep -i kill

Ou:

journalctl -k | grep -i oom

Exemplo de saída:

Out of memory: Kill process 1234 (mysqld)
Killed process 1234 (mysqld)

Se essa mensagem aparecer, o OOM Killer Linux foi ativado.


2️⃣ Consulte o OOM Score

cat /proc/$(pidof mysqld)/oom_score
cat /proc/$(pidof mysqld)/oom_score_adj

Quanto maior o número, maior a probabilidade do processo ser finalizado.


Principais causas do OOM Killer matar o MySQL

🔴 1. Buffer pool mal dimensionado

Configuração perigosa:

innodb_buffer_pool_size = 6G

Em um servidor com 8GB totais.

Isso deixa pouco espaço para:

  • PHP-FPM
  • Nginx / Apache
  • Cache do sistema
  • Kernel

Regra prática:

  • Servidor dedicado para banco → 60–70% da RAM
  • Servidor compartilhado → 30–50%

🔴 2. Ausência de swap

Sem swap, quando a RAM acaba, o OOM Killer Linux é acionado imediatamente.

Verifique:

swapon --show

Se não houver swap ativo, o risco é alto.


🔴 3. Excesso de processos PHP-FPM

Cada worker pode consumir entre 50MB e 150MB.

Exemplo:

30 processos × 100MB = 3GB de RAM

Isso reduz drasticamente a margem de segurança.


🔴 4. Ataques ou picos de tráfego

Sem rate limiting no Nginx ou firewall adequado, o consumo de memória pode disparar.


Como evitar que o OOM Killer mate o MySQL

✅ 1. Configure swap corretamente

fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile

Adicione ao /etc/fstab para persistir após reboot. /swapfile   swap    swap    sw  0   0


✅ 2. Ajuste o swappiness

sysctl vm.swappiness=10

Persistente:

echo "vm.swappiness=10" >> /etc/sysctl.conf

Isso reduz o uso agressivo de swap.


✅ 3. Ajuste corretamente o MySQL/MariaDB

Revise:

  • innodb_buffer_pool_size
  • max_connections
  • tmp_table_size
  • join_buffer_size

⚠️ Atenção: alguns buffers são multiplicados por conexão.


✅ 4. Controle o PHP-FPM

No www.conf(dependendo da sua distribuição linux e painel o nome pode ser outro):

pm = dynamic
pm.max_children = 20

Cálculo recomendado: Clique aqui e veja PHP-FPM: Como Calcular pm.max_children Corretamente

RAM disponível / consumo médio por processo

✅ 5. Ajuste o OOMScore do MySQL (opcional)

Para reduzir a chance do banco ser morto:

echo -5 > /proc/$(pidof mysqld)/oom_score_adj

Ou via systemd:

systemctl edit mysqld

Adicionar:

[Service]
OOMScoreAdjust=-5

Use com cautela — outro serviço pode ser finalizado no lugar.


Monitoramento preventivo

Ferramentas como:

  • Zabbix
  • Prometheus
  • Grafana

permitem:

  • Alertas antes da RAM esgotar
  • Visualização de tendência
  • Detecção de memory leaks

Conclusão

O OOM Killer Linux não é um erro — é um mecanismo de proteção.

Se ele matou seu MySQL, a causa normalmente é:

  • Superdimensionamento do banco
  • Falta de swap
  • Excesso de processos PHP
  • Falta de monitoramento

Infraestrutura estável é infraestrutura dimensionada corretamente.

FAQ

O que é OOM Killer no Linux?

É um mecanismo do kernel que finaliza processos quando a memória RAM acaba, evitando que o sistema trave completamente.

Por que o MySQL é frequentemente morto?

Porque geralmente consome muita memória e recebe um OOM Score alto.

Ter swap evita o OOM Killer?

Ajuda significativamente, pois cria uma margem antes da RAM esgotar totalmente.

Posso impedir o MySQL de ser morto?

É possível reduzir a probabilidade ajustando o oom_score_adj, mas isso deve ser feito com cautela.

[Precisa de ajuda com outro problema? 
Nossa equipe está disponível 24 horas por dia, 7 dias por semana .]

Veja Mais:

A Arte do Troubleshooting Linux: Diagnosticando problemas complexos(Metodologia USE – Utilization, Saturation, Errors)

CPU ociosa com sistema lento: como identificar gargalos reais no servidor

OOM Killer no Linux: Por que o MySQL é morto e como evitar

Processos Zumbis: O que são e como limpar a tabela de processos