# 1 - Deus
Aqui está uma idéia usando a estrutura de monitoramento de processos Deus . Este aplicativo é escrito em Ruby, mas pode ser usado para assistir a outros processos e protegê-los contra o processo de execução, como a morte ou, no seu caso, usar muita memória RAM.
Configuração do Ruby
Supondo que você tenha o Ruby instalado - você pode usar o rvm
(também conhecido como Ruby Version Manager) para fazer isso se você não o fizer , mas precisará ser instalado e / ou executado como root. Esta é uma exigência de deus. Você também pode instalar o Ruby a partir dos repositórios da sua distribuição, se estiver disponível.
Configuração de Deus
Com uma instalação de Ruby funcional, você instala a gema de Deus assim:
$ [sudo] gem install god
Exemplo
Você pode usar essa configuração simples de Deus para fazer o que quiser.
# /path/to/simple.god
God.watch do |w|
w.name = "hydra"
w.start = "<command to run hydra>"
w.keepalive(:memory_max => 150.megabytes,
:cpu_max => 50.percent)
end
Em seguida, invoque-o assim:
$ god -c /path/to/simple.god -D
Agora, se o Hydra exceder a utilização da CPU ou a memória usada, Deus irá reiniciá-lo. OBSERVAÇÃO: Por padrão, essas propriedades serão verificadas a cada 30 segundos e serão acionadas se houver um excedente de três de cinco verificações.
Indo mais longe
Dê uma olhada na documentação no site de Deus . O exemplo acima é de lá e eles fazem um trabalho muito mais completo de cobrir os detalhes.
# 2 - Monitor de Recursos do Processo
Outra alternativa é o Process Resource Monitor . A lista de recursos mostra que ele pode monitorar recursos por processo.
- per-process/per-user rule based resource limits
trecho da descrição
Process Resource Monitor (PRM) is a CPU, Memory, Processes & Run (Elapsed) Time resource monitor for Linux & BSD. The flexibility of PRM is achieved through global scoped resource limits or rule-based per-process / per-user limits. A great deal of control of PRM is maintained through a number of ignore options, ability to configure soft/hard kill triggers, wait/recheck timings and to send kill signals to parent/children process trees. Additionally, the status output is very verbose by default with support for sending log data through syslog.
Exemplo
Para monitorar o Hydra, poderíamos criar um arquivo de regras como este, /usr/local/prm/rules//hydra.cmd
:
IGNORE=""
MAX_CPU="50"
MAX_MEM="150"
MAX_PROC="0"
# we dont care about the process run time, set value 0 to disable check
MAX_ETIME="0"
KILL_TRIG="3"
# we want to set a bit longer soft rechecks as sometimes the problem fixes
# itself
KILL_WAIT="20"
KILL_PARENT="1"
KILL_SIG="9"
KILL_RESTART_CMD="/etc/init.d/hydra restart"
prm
é executado via cron, /etc/cron.d/prm
em intervalos de 5 minutos. De acordo com os documentos, isso provavelmente deveria ser deixado em paz.