Linux OOM-killer desabilitando problemas

2

Eu tenho uma máquina Linux sem swap, que tem vm.overcommit_memory=2 e vm.overcommit_ratio=100 set. No entanto, essas configurações parecem não ter efeito. Alguns processos recém-iniciados que tentam consumir muita memória ainda estão sendo mortos por OOM em vez de serem negados alocação de memória. Será porque os processos iniciados antes de sysctl -w vm.overcommit_memory=2 vm.overcommit_ratio=100 (por exemplo, antes de /etc/sysctl.conf ser aplicado durante a inicialização) ainda poderão acessar sua memória supercomprometida e, assim, acionar o OOM-killer? É possível (1) desabilitar o overcommit da memória usando parâmetros do kernel, ou (2) no tempo de execução forçar o kernel a alocar toda a memória supercomprometida para todos os processos?

EDIT: Após navegar pelo Documentation/ e por alguns dos códigos-fonte do Linux (git c6fa8e6de3) (1) parece improvável.

    
por jotik 07.10.2015 / 13:46

1 resposta

1

Você está tentando algo que simplesmente não é possível. Se você deixar o sistema rodar perto da exaustão, sempre haverá a possibilidade de um processo ser morto devido à exaustão da memória. Existem muitos cenários que não podem ser evitados, mas o mais fácil de entender é uma falha de página causada por um processo que adiciona uma página à sua pilha.

Você precisa de swap ou uma almofada de memória RAM se quiser evitar a morte.

    
por 07.10.2015 / 14:35