Por que o OOM-Killer não pode simplesmente matar o processo que pede muito?

12

É explicado aqui que o OOM-Killer pode ser configurado via overcommit_memory e que:

  • 2 = sem supercomprometimento. As alocações falham se pedir demais.
  • 0, 1 = overcommit (heuristicamente ou sempre). Matar algum processo (s) baseado em alguma heurística quando muita memória é realmente acessada.

Agora, posso interpretar mal isso, mas por que não há 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?

    
por Martin Ba 10.06.2014 / 10:25

1 resposta

23

Considere este cenário:

  • Você tem 4 GB de memória livre.
  • Um processo defeituoso aloca 3.999 GB.
  • Você abre um gerenciador de tarefas para eliminar o processo de fuga. O gerenciador de tarefas aloca 0,002 GB.

Se o processo que foi morto for o último processo a solicitar memória, seu gerenciador de tarefas será morto.

Ou:

  • Você tem 4 GB de memória livre.
  • Um processo defeituoso aloca 3.999 GB.
  • Você abre um gerenciador de tarefas para eliminar o processo de fuga. O servidor X aloca 0.002GB para manipular a janela do gerenciador de tarefas.

Agora o seu servidor X é morto. Não causou o problema; foi apenas "no lugar errado na hora errada". Aconteceu de ser o primeiro processo a alocar mais memória quando não havia nenhuma, mas não foi o processo que usou toda a memória para começar.

    
por 10.06.2014 / 11:21