Estou executando o servidor da web Apache e gostaria de melhorar um pouco como a situação da OOM é tratada.
Sou avare das pontuações OOM e já fiz algumas personalizações nesse assunto, então quando algo de ruim acontece, o Linux está matando os processos corretos. Mas não é o suficiente.
O problema é que, às vezes, quando ocorre OOM, o servidor fica sobrecarregado e depois trava e deve ser reiniciado. Eu gostaria de lidar com isso sem o reinício completo do servidor. Então eu preciso de alguma forma "ligar" um script na invocação killer da OOM que mataria todos os processos do apache (e seus CGIs), liberando a memória e iniciando-a novamente (Apache).
Eu sei que isso funcionaria, porque se a OOM ocorrer e eu for rápido o suficiente para fazer o login no servidor e matar o Apache manualmente, tudo está OK então.
FYI Estou executando agora quase uma centena desses servidores, e é por isso que estou procurando uma solução totalmente automática.
Uma solução possível seria, claro, usar algum watchdog que analise o syslog e detecte OOMs dessa maneira - eu já tenho algo parecido, que informa sobre os assassinatos de OOM por e-mail. Essa abordagem pode resolver algumas situações, mas se a OOM estiver realmente ruim, o servidor está sobrecarregado demais e meu script nem sequer é iniciado (é executado pelo cron). Ele pode ser melhorado usando inotify para assistir ao syslog ou canalizar o syslog diretamente (ou seja, pelo fifo) para o script.
Mas ainda estou pensando - não há como "ligar" o script diretamente ao assassino da OOM? Então eu colocaria algo assim em algum arquivo / etc / ..:
oom_action="sh /path/to/my/script.sh kill"
Ou simplesmente não é possível fazer assim?
Estou usando o Centos 6, Apache 2.2 e PHP como FastCGI.