Escape da morte do assassino da OOM no Linux

6

Fazendo um pouco de pesquisa, descobri que é possível ajustar ou mesmo tornar certos processos imunes ao invasor OOM, colocando um valor em / proc / pid / oom_adj É claro que preciso encontrar o pid para o meu processo usando o pidof ou o pgrep ou algo assim e fazer um script que execute quando todos os meus processos estiverem em execução.

O problema com o assassino da OOM é como com qualquer outro assassino. Pode parecer sã e racional na superfície, mas no fundo eles são de fato seriamente perturbados, bastante insanos e muitas vezes incapazes de fazer um julgamento correto.

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 (acalme-se, eu estou falando sobre o material do computador) então estou procurando por um melhor maneira de proteger certos processos contra o killer da OOM, então eu não tenho que executar um script toda vez que todos os meus progs estiverem rodando ou sempre que eu iniciar um novo programa. Alguma idéia de como conseguir isso facilmente?

    
por Waxhead 31.12.2012 / 19:04

1 resposta

6

Você não deve confiar no OOM killer para gerenciar seus processos. O killer da OOM é uma medida de último recurso, quando a única outra alternativa é uma falha no sistema. Por exemplo. todas as memórias de cache e de buffers de disco foram liberadas e confirmadas, tudo que pode ser descartado / 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.

Por causa das restritas restrições que o OOM killer opera (não pode alocar mais memória, não pode trocar em outros processos, etc.), irá matar processos que você não quer que sejam mortos para aliviar pressão de memória.

Acho que, se o seu sistema não tiver memória suficiente, você precisará adicionar mais memória ou trocar espaço, dependendo se estiver ficando sem memória física ou memória virtual total.

Se, por outro lado, você tem alguns processos descontrolados que consomem muita memória de tempos em tempos, devido a um vazamento de memória ou algum outro bug, você pode controlar isso por outros meios:

  1. Defina ulimit -m antes de iniciar o processo problemático e limite a quantidade de memória que o processo pode alocar.

  2. Reinicie o processo ofensivo normalmente em um cronograma via cron, se houver um vazamento de memória e seja razoavelmente previsível.

Em qualquer caso, o assassino da OOM não é seu amigo, é um canhão solto: - /

    
por 31.12.2012 / 20:21