É 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?
E se um processo crítico do sistema solicitar muita memória?
—
Lawrence
Em primeiro lugar - ele pode fazer isso. Mas, o maior problema com essa pergunta é que, com toda a probabilidade, se um processo está pedindo memória, ele está sendo executado recentemente - ou, em outras palavras, esse é um novo processo envolvido no processamento muito atual. Você prefere que o OOM permita que seu cliente não aberto por 3 dias permaneça desperdiçando memória do sistema ou prefere que o YouTube realmente carregue algum tempo este ano? linuxatemyram.com
—
mikeserv
É isso que a
—
Barmar
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 que malloc()
retorna e ele trava.
Observe que 2 é realmente o
—
hans_meine
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.