Fazendo um pouco de pesquisa, descobri que é possível ajustar ou até mesmo tornar certos processos imunes ao assassino OOM inserindo um valor em /proc/pid/oom_adj É claro que preciso encontrar o pid para o meu processo usando pidof ou pgrep ou algo assim e crie um script que eu executo quando todos os meus processos estiverem em funcionamento.
O problema com o assassino OOM é igual ao de qualquer outro assassino. Pode parecer sensato e racional à primeira vista, mas no fundo eles estão de facto seriamente perturbados, bastante insanos e muitas vezes incapazes de fazer um julgamento correcto.
Agora, eu pessoalmente não me importo de matar um pouco, desde que eu saiba o que está acontecendo e tenha um certo controle sobre as vítimas (calma pessoal, estou falando da coisa do computador), então estou procurando uma maneira melhor de proteger certos processos contra o temido OOM killer para que eu não precise executar um script toda vez que todos os meus programas estiverem em execução ou sempre que eu iniciar um novo programa. Alguma idéia de como conseguir isso facilmente?
Responder1
Você não deveria confiar no OOM killer para gerenciar seus processos. O OOM killer é uma medida de último recurso, quando a única outra alternativa é uma falha no sistema. Por exemplo, toda a memória de cache e buffers de disco foi liberada e comprometida, tudo que pode ser trocado/descartado é processado e você ainda não tem memória suficiente... Obviamente você não quer que seu sistema em execução chegue a esse estado.
Devido às restrições estritas sob as quais o OOM killer opera (não é possível alocar mais memória, não é possível trocar em outros processos, etc.), elevaimate processos que você não deseja que sejam eliminados para aliviar a pressão da memória.
Acho que se o seu sistema simplesmente não tiver memória suficiente, você precisará adicionar mais memória ou espaço de troca, dependendo se está ficando sem memória física ou com memória virtual total.
Se, por outro lado, você tiver alguns processos descontrolados que consomem muita memória de vez em quando, devido a um vazamento de memória ou algum outro bug, você pode controlar isso por outros meios:
Defina
ulimit -m
antes de iniciar o processo incorreto e limite a quantidade de memória que esse processo pode alocar.Reinicie o processo incorreto normalmente de acordo com um agendamento via cron, se houver um vazamento de memória e for bastante previsível.
De qualquer forma, o OOM killer não é seu amigo, é um canhão solto :-/