É possível que o sistema troque preventivamente páginas inativas ( vm.swappiness
), mas invoque o oom-killer quando o sistema ficar sem memória RAM (em vez de ficar sem memória) e forçado a trocar?
O objetivo final é impedir que o sistema seja interrompido quando ele começar a danificar o disco devido a falhas importantes nas páginas, mas ainda assim permitir que as páginas inativas sejam trocadas.
Outro desejo seria configurar quanta memória de troca o sistema é forçado a usar antes que o oom-killer seja acionado. Dessa forma, o sistema pode entrar em swap um pouco, desde que não vá muito longe. Ou eu poderia definir esse limite para acionar oom-killer antes de usar toda a RAM, para que sempre haja espaço para o cache do sistema de arquivos (e, assim, evite mais trocas de disco).
Não parece que isso seria difícil de fazer. Parece que você poderia simplesmente dizer ao oom-killer para disparar quando o sistema tiver o X ram usado / livre. Mas é por isso que estou perguntando; Eu não sei.
Para esclarecimento, não pretendo desativar a troca ou ajustar o vm.swappiness
parâmetro
fonte
Respostas:
Eu também lutei com esse problema. Eu só quero que meu sistema permaneça responsivo, não importa o que aconteça, e prefiro perder processos do que esperar alguns minutos. Parece não haver maneira de conseguir isso usando o kernel oom killer.
No entanto, no espaço do usuário, podemos fazer o que quisermos. Então, escrevi o Early OOM Daemon ( https://github.com/rfjakob/earlyoom ) que matará o maior processo (por RSS) quando a RAM disponível ficar abaixo de 10%.
Sem o earlyoom, foi fácil bloquear minha máquina (8 GB de RAM) iniciando o http://www.unrealengine.com/html5/ algumas vezes. Agora, as guias culpadas do navegador são mortas antes que as coisas saiam do controle.
fonte
column -t -s,
alguns arquivos csv enormes e deixarearlyoom
matá-lo quando isso não for possível, antes de perceber qualquer falta de resposta.Isso soa como uma solução muito elaborada. Eu sugeriria (e faço isso em máquinas que configurei que não precisam hibernar) simplesmente alocar uma pequena quantidade de espaço de troca (128-256MiB). Dessa forma, o kernel pode trocar algumas páginas, mas o OOM-killer é invocado antes que as coisas fiquem ruins.
Se você realmente quiser fazer isso, acho que precisará escrever seu próprio script / programa que monitora o uso da troca e chama o OOM-killer usando a tecla Magic SysReq (que pode ser feita programaticamente escrevendo para
/proc/sysrq-trigger
).fonte
vm.swappiness
troca forçada devido à falta de memória RAM. Tudo o que precisa acontecer é quando o kernel é forçado a trocar, para acionar oom-killer. E 10 gb também deixam muito espaço para troca forçada para debulhar o disco.