Eu suspeito que algum arquivo grande ou URL em particular esteja sendo muito afetado, mas não estou conseguindo identificar qual deles é. Existem algumas ferramentas ou etapas de solução de problemas padrão recomendadas? Obrigado!
Algumas coisas podem ser verificadas se você considerar que se trata de um problema relacionado à largura de banda:
A seguir, dois scripts que uso para obter uma ideia básica do status das conexões em um servidor usando o netstat. O primeiro apenas mostra o número de conexões com base no tipo de conexão:
#!/bin/sh
# Display number of connections on a server
#
echo -n $"Established: "
netstat -an | grep ESTABLISHED | wc -l
echo -n $" Syn Recv: "
netstat -an | grep SYN | wc -l
echo -n $" Wait: "
netstat -an | grep WAIT | wc -l
echo -n $" Listen: "
netstat -an | grep LISTEN | wc -l
echo -n $" Total: "
netstat -an | wc -l
Note que é normal ter um grande número de conexões no estado WAIT (pelo menos do que observei). Um grande número de conexões SYN pode ser para fazer um ataque do tipo SYN flood DOS.
O script a seguir conta o número de conexões estabelecidas pelo endereço IP e é útil para ver se há um endereço IP em mau comportamento específico.
#!/bin/sh
# Counts the number of connections by IP address
netstat -an | grep ESTABLISHED | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
Se o seu servidor estiver sob carga pesada e você tiver milhares de conexões, esse script pode demorar um pouco para ser executado (~ 1 minuto no pior caso que já vi).
Observe que, dependendo do seu aplicativo, várias entradas por IP não são necessariamente ruins. Por exemplo, no meu caso 10-20 entradas / IP é normal, mas além dessa quantidade é suspeito. Já vi endereços IP "inválidos" que solicitam o mesmo documento / arquivo centenas de vezes ou percorrem todos os arquivos do site e fazem o download. O último script torna relativamente fácil identificar esses IPs, que você pode usar para procurar em seus logs para obter mais detalhes, se necessário.
Não há uma maneira geral de depurar o desempenho ruim do servidor, mas existem algumas ferramentas que devem ser úteis para você. Eu suponho que você esteja usando alguma pilha http no linux.
LogFormat %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %T/%D combined
ane e, em seguida, tentar determinar os GETs ou POSTs mais longos do arquivo de log. apachetop -f /var/log/apache2/access.log
lhe dará uma boa perspectiva sobre solicitações pendentes Todo administrador de sistema que tenha lutado contra problemas como o seu, provavelmente enumeraria muitas dicas mais rápidas, mas o fato é que todas essas regras dependem muito do ambiente (hardware, sistema operacional, servidor da Web, aplicativo, banco de dados) e podem seja somente aprendido pela experiência. Muitas vezes bastante doloroso.
Considere monitorar o sistema com uma ferramenta como sar
ou Munin
. Isso lhe dará informações sobre quais componentes estão mais ocupados. Eu gosto de Munin por seus relatórios gráficos, também a capacidade de definir alertas. sar dá bons detalhes sobre o disco e a atividade de troca.
Incluir o tempo de serviço no log do Apache é útil. Eu normalmente mudo o campo logname (ident) remoto ( %l
) com o tempo gasto para atender à solicitação ( %T
) no formato de log estendido.
Tags performance bandwidth