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.
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.
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.
Você pode usar o supervisord para gerenciar o processo. O supervisor pode definir a quota de memória.
Tags bash oom-killer