Como encontrar o site que trava o servidor?

6

Provavelmente, 1 em cada 100 sites trava o VPS a cada poucos dias. As conexões do Apache vão para algumas centenas e as requisições do mysql para alguns milhões. Isso faz com que a CPU fique 100% + permanentemente e torne o servidor completamente inutilizável. Reiniciar conserta a situação por alguns dias. Como encontrar o maligno?

Eu tenho deus mod_status com extendedstatus ON, mas ainda assim, apenas mostra os poucos pedidos recentes. Não sei como usar isso para reduzi-lo entre 100 sites.

O restante do tempo, o servidor está usando 20-30% dos recursos para que ele não seja sobrecarregado com sites.

    
por user240891 17.04.2015 / 14:27

1 resposta

2

Eu não sabia muito sobre a configuração do seu servidor, mas vou tentar ajudar.

Primeiro inicie iptables e não permita atacar seu servidor

iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT

Depois disso, acho que logrotate pode nos ajudar a encontrar um site com maior impacto.

Instale logrotate

sudo apt-get install logrotate

Para verificar se o logrotate foi instalado com sucesso, execute isto no prompt de comando.

logrotate

Configurações e opções padrão para o utilitário logrotate estão presentes em:

/etc/logrotate.conf

Algumas das configurações importantes são: intervalo de rotação, tamanho do arquivo de log, contagem de rotação e compactação.

Informações do arquivo de log específicas do aplicativo (para substituir os padrões) são mantidas em:

/etc/logrotate.d/

Minha ideia é monitorar o arquivo de acesso http. Site com mais acesso deve ter maior log de acesso. Logrotate e cron vão assistir a nós sobre isso e enviarão um e-mail sobre o problema ...

Edite logrotate.conf e adicione algum código

sudo nano /etc/logrotate.conf

/path_to_apache_logs/*.log {
    size 1M
    dateext
    postrotate
      /usr/bin/killall -HUP httpd
      ls -ltr /path_to_apache_logs/ | mail -s "$HOSTNAME: Apache restarted and log files rotated" [email protected]
    endscript
}

Você deve personalizar

size - tamanho do arquivo de log, mude com base nas suas necessidades path_to_apache_logs - altera o caminho baseado no caminho do log em vhost.conf

Mais sobre a personalização de logrotate.conf , você pode encontrar aqui

Configure cron para executar logrotate a cada 5 min

*/5  *  *  *  *   root    /usr/sbin/logrotate /etc/logrotate.conf

Quando você está em "ataque", acessa o log com rapidez de crescimento. Cron executará logrotate para verificar o tamanho do arquivo de log e, se o tamanho do arquivo for XX, ele irá girar o log, reiniciar o ataque e enviar mensagens para você.

Como cada host virtual possui um arquivo de acesso próprio, você saberá que o site é o servidor "killer"

    
por 2707974 22.04.2015 / 12:18