É explicado aqui que o OOM-Killer pode ser configurado via overcommit_memory
e que:
- 2 = sem confirmação excessiva. As alocações falham se pedir demais.
- 0, 1 = confirmação excessiva (heuristicamente ou sempre). Mate alguns processos com base em algumas heurísticas quando muita memória é realmente acessada.
Agora, posso entender completamente isso, mas por que não existe uma opção (ou por que não é o padrão) para matar o próprio processo que realmente tenta acessar muita memória alocada?
linux
out-of-memory
Martin Ba
fonte
fonte
no overcommit
opção essencialmente faz. Se um processo solicitar muita memória, ele falhará. Se ele verificar o erro, ele geralmente se matará; caso contrário, provavelmente receberá um erro de segmentação ao tentar desreferenciar o ponteiro nulo quemalloc()
retorna e ele trava.no overcommit
modo, de acordo com as fontes citadas (como kernel.org/doc/Documentation/vm/overcommit-accounting ). Acho que vou editar sua pergunta de acordo.Respostas:
Considere este cenário:
Se o processo que foi morto foi o último a solicitar memória, seu gerenciador de tarefas foi morto.
Ou:
Agora seu servidor X é morto. Não causou o problema; estava apenas "no lugar errado na hora errada". Foi o primeiro processo a alocar mais memória quando não havia mais nada, mas não foi o processo que usou toda a memória para começar.
fonte