Pare um processo (script) invocando o oom killer

2

Eu tive uma situação muito infeliz, onde um script bash que continha um erro sutil ficou louco e levou toda a memória disponível e, em seguida, começou a matar outras tarefas (aplicativos de produção!) para obter ainda mais.

Como posso invocações preparadas para o futuro deste e de outros scripts para que, quando atingissem o limite de memória, caíssem eles mesmos e não matassem outros aplicativos?

Eu prefiro algo que eu possa incorporar no texto do script.

    
por Imaskar 27.06.2018 / 08:46

3 respostas

2

ulimit -m permitirá que você defina um limite principal (bem, RSS) aplicável a um processo, e ulimit -v permitirá que você faça o mesmo para a área de cobertura da VM.

    
por 31.07.2018 / 16:46
2

No Linux, o link documenta uma variedade de ajustes para o sistema de memória virtual.

Por exemplo, vm.oom_kill_allocating_task=1

If this is set to non-zero, the OOM killer simply kills the task that triggered the out-of-memory condition. This avoids the expensive tasklist scan.

Não há garantias de que seus aplicativos de produção não serão os que acionam a OOM. Mas é mais provável que uma alocação fugitiva aconteça.

Há também uma pontuação que você pode ajustar para ponderar processos específicos mais ou menos propensos a serem assassinados pela memória. / proc / $ PID / oom_adj. Embora, você provavelmente queira configurá-lo em seus scripts de inicialização. systemd.exec tem OOMScoreAdjust .

Você pode desativar completamente o killer da OOM. No entanto, em extrema pressão de memória, o sistema pode não ser capaz de responder ou entrar em pânico.

    
por 27.06.2018 / 15:23
0

Você pode usar o supervisord para gerenciar o processo. O supervisor pode definir a quota de memória.

    
por 27.06.2018 / 08:58