Skip to content
Latchkey

O que significa "OOM killer"? O Out-of-Memory killer do Linux

Quando o Linux fica sem memória utilizável, o OOM killer do kernel escolhe um processo e o termina com SIGKILL para manter o sistema vivo. No CI, esse processo geralmente é seu build.

O out-of-memory (OOM) killer é uma válvula de segurança de último recurso do kernel. Quando não há memória para alocar, ele sacrifica um processo em vez de deixar o sistema inteiro travar - e o processo escolhido morre instantaneamente.

Por que ele existe

O Linux deixa os processos alocarem memória de forma otimista, presumindo que nem toda ela será usada de uma vez. Quando essa presunção quebra e a memória física mais o swap se esgotam, o kernel não pode honrar novas alocações. Em vez de travar, ele invoca o OOM killer para liberar memória matando algo.

Como ele escolhe uma vítima

O kernel pontua cada processo por um "oom_score" fortemente ponderado por quanta memória ele usa. O maior consumidor de memória é a vítima mais provável. No CI, isso costuma ser o compilador, o test runner ou a VM da linguagem fazendo o trabalho pesado - exatamente o processo que importava para você.

Como se manifesta no CI

  • Um step morre abruptamente com a palavra Killed e sem stack trace.
  • O exit code é 137 (128 + 9, SIGKILL).
  • O log do kernel mostra uma linha Out of memory: Killed process / oom-kill.

Corrigindo OOM no CI

Ou dê mais memória ao job (um runner maior) ou reduza o pico de uso - baixe o paralelismo de teste/build, limite tamanhos de heap da linguagem ou divida o trabalho. Em runners de container, o limite costuma ser um teto de memória de cgroup, não a RAM total do host, então o host ter memória livre não significa que seu job tinha.

Principais conclusões

  • O OOM killer libera memória com SIGKILL em um processo quando o sistema está sem.
  • Ele mira no maior consumidor de memória - geralmente seu processo de build ou teste.
  • Aparece como exit 137 com Killed e sem traceback.
  • Corrija adicionando memória ou reduzindo o pico de uso; atente aos limites de cgroup.

Guias relacionados