A primeira coisa que você precisa fazer é monitorar o que está acontecendo, voltar e atualizar sua pergunta quando tiver mais detalhes.
Use um pequeno script que consultará o carregamento do sistema e da memória a cada poucos segundos e salve essas informações em um arquivo. Talvez algo assim:
#!/bin/sh
while true
do
echo "-------'date'--------"
echo "\t\t%MEM\t%CPU"
ps ax -o comm,%mem,%cpu | sort -nk3 | tail -n 3
sleep 30
done
O script imprimirá as estatísticas de uso dos três processos mais pesados da CPU e, em seguida, dos três processos mais pesados de memória. Ele irá esperar por 30 segundos (você pode mudar isso dando um número diferente para sleep
) e fazer tudo de novo. Sua saída é assim no meu sistema:
$ ./monitor.sh
-------Mon Feb 4 20:00:51 CET 2013--------
%MEM %CPU
java 9.1 3.6
Xorg 3.3 4.9
firefox 8.1 12.2
---
Xorg 3.3 4.9
firefox 8.1 12.2
java 9.1 3.6
Salve este script como monitor.sh e torne-o executável e execute-o em segundo plano enquanto redireciona sua saída para um arquivo:
chmod 744 monitor.sh
./monitor.sh > usage.log &
Você pode monitorar o progresso executando tail -f usage.log
.
Deixe isso funcionar por um tempo e verifique o que estava acontecendo na próxima vez em que seu servidor não responder. Tenha cuidado, porém, o script está imprimindo 9 linhas a cada 30 segundos. Se você deixar isso funcionar por muito tempo, você receberá um arquivo bem grande. Lembre-se de pará-lo quando tiver coletado as informações necessárias.