Aumente o sar e imprima a tabela ps a cada minuto. Veja minha resposta detalhada aqui .
Na próxima vez que o servidor explodir, use sar -r
para ajudar a rastrear quando aconteceu. Agora use a saída do ps-cronjob ou do meu wrapper perl para ps no github , para descobrir qual processo pode ter sido o culpado .
Digamos que o servidor explodiu entre as 12:00:00 e as 13:00:00. Use sar -r -s 12:00:00 -e 13:00:00
. A partir disso você deve ver um pico nos dados. (Se é mais fácil, existe um utilitário baseado em java para fazer gráficos, mas geralmente não vale a pena o aborrecimento.) Digamos que você veja um pico (ou um vale) às 12:15. Agora, digitalize a saída de ps em coluna durante um intervalo de tempo entre, por exemplo, 12:00 e 12:15, classifique-a por pid e, em seguida, por time e observe as colunas de memória:
awk '/^=== .* 12:00:/,/^=== .* 12:16:/' /var/log/sa/ps/today |
sort -k 1n -k 16
(As opções de classificação assumem que o tempo está na coluna 16, que pode ou não ser o caso). Agora você pode filtrar essa saída pelo awk novamente para encontrar diferenças entre as linhas de saída:
... | awk 'lastpid && lastpid==$1 && last != $0 { print} /^[0-9]/ { lastpid=$1;last=$0; }'
Esse é um filtro bem grosseiro. Para alguns processos (cuja linha de comando muda o tempo todo, como com mysql e postgresql e snmpd), isso não será muito útil, mas esperamos que você possa ajustar o awk para ajudá-lo a encontrar o (s) culpado (s).