Na documentação oficial do /proc/sys/vm/*
:
oom_kill_allocating_task
Isso ativa ou desativa a eliminação da tarefa de acionamento da OOM em situações de falta de memória.
Se isso for definido como zero, o killer da OOM examinará todo o lista de tarefas e selecione uma tarefa baseada em heurística para matar. Isso normalmente seleciona uma tarefa desonesta de memória que libera uma grande quantidade de memória quando morto.
Se isso for definido como diferente de zero, o killer da OOM simplesmente mata a tarefa que desencadeou a condição de falta de memória. Isso evita o dispendioso varredura da lista de tarefas.
Se panic_on_oom for selecionado, terá precedência sobre qualquer valor é usado em oom_kill_allocating_task.
O valor padrão é 0.
Para resumir, ao definir oom_kill_allocating_task
para 1
, em vez de varrer seu sistema procurando por processos a serem mortos, o que é uma tarefa cara e lenta, o kernel simplesmente acabará com o processo que causou o sistema sem memória.
De minhas próprias experiências, quando uma OOM é acionada, o kernel não tem mais "força" suficiente para fazer essa varredura, tornando o sistema totalmente inutilizável.
Além disso, seria mais óbvio apenas matar a tarefa que causou o problema, por isso não consigo entender por que ela está definida como 0
por padrão.
Para testes, você pode simplesmente escrever no pseudo arquivo apropriado em /proc/sys/vm/
, que será desfeito na próxima reinicialização:
echo 1 | sudo tee /proc/sys/vm/oom_kill_allocating_task
Para uma correção permanente, escreva o seguinte em /etc/sysctl.conf
ou em um novo arquivo em /etc/sysctl.d/
, com uma extensão .conf
( /etc/sysctl.d/local.conf
, por exemplo):
vm.oom_kill_allocating_task = 1