Skip to content
Latchkey

Exit Code 137 Explicado: SIGKILL e o OOM Killer no CI

Exit code 137 significa que um processo foi terminado por SIGKILL. O número é 128 + 9, onde 9 é o signal - e no CI o culpado é quase sempre o out-of-memory killer.

Quando um step de CI termina com exit code 137, ele não "retornou" esse código - ele foi morto. Entender a codificação diz exatamente o que aconteceu e por que geralmente não há stack trace.

A codificação 128 + N

Por convenção Unix, um processo terminado pelo signal N reporta o exit code 128 + N. SIGKILL é o signal 9, então 128 + 9 = 137. Da mesma forma, SIGTERM (15) é 143 e SIGINT (2) é 130. Ver um código acima de 128 é seu sinal de que um signal - não a lógica do próprio programa - encerrou o processo.

Por que é quase sempre OOM no CI

SIGKILL não pode ser capturado, bloqueado ou ignorado, então o kernel o usa quando precisa forçar um processo a morrer imediatamente. Em runners de CI com memória limitada, a fonte mais comum é o out-of-memory killer do cgroup recuperando memória ao matar o processo mais pesado. É por isso que 137 costuma aparecer apenas com a palavra Killed e sem traceback.

Como confirmar e corrigir

  • Verifique o uso de memória do runner por volta da falha, ou o log do kernel por uma linha oom-kill.
  • Dê mais memória ao job, ou reduza o uso de pico (menos paralelismo, limite os heaps das linguagens).
  • Descarte um watchdog externo ou timeout --signal=KILL se a memória parecer estar bem.

Principais conclusões

  • Exit code 137 = morto por SIGKILL (128 + 9).
  • No CI é esmagadoramente o out-of-memory killer.
  • Raramente há stack trace porque SIGKILL não pode ser interceptado.
  • A correção é mecânica: mais memória ou menor uso de pico.

Perguntas frequentes

O exit 137 pode acontecer sem ficar sem memória?
Sim - qualquer SIGKILL produz 137, incluindo um watchdog externo ou um kill -9. Mas em runners de CI com memória restrita, o OOM é de longe a causa mais provável.

Guias relacionados