Como posso determinar muito especificamente o que está causando meu servidor web ficar mais lento?

1

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!

    
por pitosalas 12.02.2011 / 17:01

4 respostas

2

Bem, meu primeiro instinto, se eu acreditasse que a lentidão era devido ao tráfego excessivo em uma URL ou arquivo, seria verificar os registros do servidor da web ou qualquer análise que você possa ter. Isso informará o tráfego que você está enfrentando.

    
por 12.02.2011 / 17:02
0

Algumas coisas podem ser verificadas se você considerar que se trata de um problema relacionado à largura de banda:

  • A mencionada em outra resposta, verifique os logs de acesso / erro para obter um histórico de clientes que geram mais tráfego do que o normal. Se for um site pequeno, você poderá ver manualmente os logs. Caso contrário, procure em uma análise de registro / visualização para esse tipo de registro.
  • Se o seu provedor de servidor tiver um gráfico / exibição de uso de rede para seu servidor, você poderá usá-lo como um guia aproximado para verificar se / quando houver picos de uso.
  • Você pode usar o '' ifconfig -a '' para examinar o uso bruto das interfaces de rede do seu servidor.
  • Você pode usar '' netstat -an 'para listar todas as conexões atuais.
  • Use o módulo de status do Apache / lighttpd (ou um módulo semelhante para seu aplicativo de servidor) para exibir a lista atual de clientes conectados.
  • Não assuma que o problema está necessariamente relacionado à largura de banda, especialmente se nada se destacar como anormal nos logs / stats.
  • Considere instalar algum tipo de aplicativo de monitoramento no caso de você achar difícil encontrar o problema quando ele ocorrer.

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.

    
por 12.02.2011 / 18:07
0

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.

  1. Registre a quantidade de tempo necessária para processar cada solicitação. (no apache, você pode definir o LogFormat para: 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.
  2. A análise quase completa do logfile em tempo real pode ser feita usando o comando apachetop (para arquivos de log no formato apache, não necessariamente gerados pelo apache) apachetop -f /var/log/apache2/access.log lhe dará uma boa perspectiva sobre solicitações pendentes
  3. No lado do cliente, você pode usar algumas ferramentas do webdeveloper para determinar quais elementos do site mais ocupado estão sendo carregados lentamente. Eu recomendaria o plug-in link do firefug para o firefox.
  4. Verifique o desempenho do disco do servidor. Usando o link , você pode determinar rapidamente quais discos estão 100% ocupados. Isso pode ser um problema, especialmente quando você está usando o mecanismo de banco de dados (mysql ou pgsql) nos mesmos hosts e tem alto tráfego.
  5. Arquivos estáticos grandes não devem ser veiculados pelo apache. A melhor maneira de fazer com que o apache funcione bem, é servir tudo o que você pode, por outros servidores leves - (ou seja, nginx, lighthttpd ...). Tente encontrar o arquivo mais importante veiculado pelo seu servidor da Web e exiba-o no nginx.
  6. Verifique também as estatísticas de uso de banda. Se você está atingindo os limites da sua rede, as páginas ficarão muito mais lentas e o servidor terá uma carga alta.

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.

    
por 12.02.2011 / 18:58
0

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.

    
por 12.02.2011 / 21:30