IIS: Como saber se um tempo lento é devido a uma conexão de rede lenta

10

De acordo com http://support.microsoft.com/kb/944884 , "quando uma resposta grande ou respostas grandes são enviadas a um cliente por uma conexão de rede lenta, o valor do campo demorado pode ser maior que o esperado".

Tenho uma situação em que um cliente diz: "Enviei uma solicitação ao seu servidor da Web às 10:03:24 e demorou 20 segundos, por quê?". Também vejo isso nos logs do IIS, mas o módulo ASP.NET do servidor o registrou em 100ms e os contadores de CPU e disco estavam baixos.

Eu suspeito que é devido a uma conexão de rede lenta. Como posso provar isso?

Atualizar:

1) Essas são solicitações de serviço da Web SOAP, portanto, sem gráficos incorporados, apenas um HTTP POST com uma única página XML de resultados.

2) Além disso, reproduzi isso limitando a velocidade da rede no lado do cliente e os sintomas são exatamente os mesmos.

3) O problema é intermitente, o que significa que a mesma solicitação normalmente é rápida para o cliente, mas ocasionalmente lenta. Eu não posso reproduzir isso sozinho, além de estrangular a rede. O log do ASP.NET do servidor mostra sempre rápido, mas o log do IIS mostra lento quando o cliente diz que está lento.

4) Só tenho acesso ao servidor e preciso fornecer o máximo de informações possível ao cliente para que ele aceite que o problema não estava no servidor e saiba quais ferramentas de log / ferramentas executar no cliente para encontrar a causa raiz.

Jon
fonte
Essas solicitações são visualizações de página normais que exigem a busca de gráficos incorporados e assim por diante? Ou são consultas automatizadas que retornam apenas uma única página? Na verdade, estamos medindo o tempo para carregar uma página ou o tempo para responder a uma única solicitação HTTP?
David Schwartz

Respostas:

4

Tenho uma situação em que um cliente diz: "Enviei uma solicitação ao seu servidor da Web às 10:03:24 e demorou 20 segundos, por quê?". Também vejo isso nos logs do IIS, mas o módulo ASP.NET do servidor o registrou em 100ms e os contadores de CPU e disco estavam baixos.

Eu suspeito que é devido a uma conexão de rede lenta. Como posso provar isso?

Começa com a procura de pacotes descartados entre o navegador do seu cliente e todas as fontes de imagens / scripts / html da página da web mencionada acima. Se você encontrar quedas consistentes de pacotes, sabe com certeza que há algo na rede que precisa ser corrigido ... mesmo que seja apenas um link que está sobrecarregado. Quedas de pacotes não são a única razão para uma rede lenta, mas é a fonte mais comum em minha experiência. Outras fontes podem ser um proxy ou mecanismo de cache configurado incorretamente. Infelizmente, não posso listar todos os possíveis culpados da rede aqui.

No entanto, as pessoas geralmente culpam a rede, quando na verdade os problemas de velocidade estão bem sob seu próprio controle. Possíveis explicações:

  • Suponha que o HTML dessa página tenha sido mal escrito e carregue os scripts necessários na ordem errada, para que a página inteira seja renderizada lentamente, mesmo que quase todos os recursos estejam no local.
  • A página está aguardando um recurso que simplesmente não existe e atinge o tempo limite enquanto aguarda.
  • Um script está em um loop lento que bloqueia por um tempo
  • Um mecanismo de cache demora muito para entregar uma imagem
  • Seu CGI está procurando algo em um banco de dados e a pesquisa em si é lenta
  • Você está usando o Google Analytics , que diminui a velocidade devido à forma como a página é escrita

Eu poderia continuar, mas o ponto é que você precisa definir exatamente o motivo pelo qual a página fica lenta. Uma rede defeituosa é possível; também é possível que outros fatores estejam contribuindo para o desempenho lento.

Para diagnosticar mais:

  • Se a página carregar bem no Firefox, a guia Rede no Firebug é sua amiga (clique em Hit F12, vá para a guia Rede e recarregue a página). O Firebug fornece um belo diagrama em cascata sobre como a página é carregada e onde estão os atrasosCachoeira Firebug
  • Se a página carregar bem no Chrome, você poderá fazer algo semelhante ( CntlShiftIclique, clique na guia rede e recarregue a página).cromada
  • Se a página for suportada apenas no IE (vergonha para os desenvolvedores de HTML), sua melhor aposta é começar a carregar cada um desses elementos de página ASP individualmente curlaté encontrar algo que pareça muito lento, e descubra por que esse elemento específico é lento.

BTW, os exemplos do Chrome e Firefox usaram uma consulta CGI do Debian.org ; este é um bom exemplo de atraso que vem de uma pesquisa CGI.

Quando tudo mais falhar, você pode obter um .pcapdo wireshark e executá-lo tcptrace; No entanto, embora tcptraceseja muito bom em analisar despejos de pacotes, não há garantias de que você possa isolar o problema tcptracesozinho. Consulte esta resposta para obter informações sobre o uso de tcptracediagnósticos.

Mike Pennington
fonte
Veja minhas atualizações acima. Embora suas informações sejam muito úteis no caso geral, acho que não se aplicam aqui. A página é apenas intermitentemente lenta e os sintomas são reproduzíveis apenas quando eu estrangulo a rede no lado do cliente.
Jon
os gráficos em cascata no firefox / chrome suportam operações de postagem http, bem como curl ... Não sei como você concluiu que as informações não se aplicam, mas parece que não envolve uma aplicação completa das ferramentas no domínio do problema .
Mike Pennington
Firefox / chrome são ferramentas do lado do cliente. Eu só tenho acesso ao servidor e não consigo reproduzir novamente usando meu próprio cliente. Preciso dizer, apenas do servidor, se uma solicitação específica foi lenta devido a problemas de rede. Isso deixa a captura de pacotes, mas é muito pesado para deixar em produção (considere que 1 em 10.000 solicitações pode ser lenta).
31412 Jon
Como engenheiro de rede com mais de 15 anos de experiência, posso respeitosamente sugerir que você não pode diagnosticar um problema de serviços HTTP do lado do cliente apenas no servidor; você simplesmente não tem informações suficientes (o que aparentemente também é sua conclusão ... no entanto, você não parece aberto a viver com essa realidade :-).
Mike Pennington
Se a captura de pacotes no servidor pode diagnosticar problemas de rede (por exemplo, através de uma confirmação lenta do TCP), não é razoável esperar que uma ferramenta / registrador de menor peso possa mostrar o mesmo?
31412 Jon
0

O resultado do artigo 944884 da kb é que o tempo real necessário para concluir a resposta pode não ser refletido com precisão no log. É por isso que o artigo menciona o tempo da rede.

Se o sintoma for reproduzível, eu executaria uma captura de pacotes no lado do servidor (e preferencialmente também no lado do cliente) para ver os horários reais em que a conexão foi reconhecida pelo cliente.

Greg Askew
fonte
Obrigado, mas não é reproduzível a não ser pela redução da velocidade da rede, e uma captura de pacotes é muito pesada para ser usada na produção.
31412 Jon
0

O atraso de 20 segundos também pode ser causado pelo IIS ter que reiniciar o w3wp.exe, que entrará em suspensão quando não for usado.

Steve Rollins
fonte
1
Você pode melhorar esta resposta respondendo "como saber". O w3wp.exe que dorme não é relevante no meu caso, pois desabilitei esse comportamento, mas isso pode ajudar outras pessoas.
21415 Jon