O Killer Fora da Memória do kernel é usado como último recurso. Se você fornecer memória e / ou troca suficiente para os processos em execução, ela não será acionada.
À medida que seu sistema fica sem memória física, ele começa a usar o espaço de troca. A partir deste ponto começará a desacelerar, às vezes dramaticamente. Se você tiver processos ativos suficientes tentando usar a mesma memória física, seu sistema começará a gastar mais tempo trocando-os e removendo-os do que realmente pode executá-los.
Quando a troca está próxima do esgotamento, o kernel começa a eliminar processos, na tentativa de manter os outros em execução. Eu nunca precisei investigar os critérios que o OOMK usa para escolher processos, então não posso descrevê-los aqui.
A solução é uma ou mais das seguintes
- Adicione mais memória física
- Adicione mais (ou alguns) swap. Isso pode ser uma partição de disco ou arquivo
- Reduza o número ou o tamanho dos processos em execução
- Corrigir o código em processos com memória de fuga
Algumas outras referências
É possível definir um limite por processo com base na quantidade de memória que ele pode usar. Quando ele tenta exceder isso, a solicitação de alocação falha. Normalmente, isso resulta em um programa com falha, seja de forma descontrolada, porque não testou o valor de retorno da solicitação de alocação ou de maneira controlada com uma exceção fatal.