IIS: comment savoir si un temps lent est dû à une connexion réseau lente

10

Selon http://support.microsoft.com/kb/944884 , "lorsqu'une réponse volumineuse ou des réponses volumineuses sont envoyées à un client via une connexion réseau lente, la valeur du champ de temps pris peut être plus élevée que prévu".

J'ai une situation où un client dira: "J'ai envoyé une demande à votre serveur Web à 10 h 03 min 24 s et cela a pris 20 secondes, pourquoi?". Je peux également voir cela dans les journaux IIS, mais le module ASP.NET du serveur l'a enregistré comme prenant 100 ms, et les compteurs CPU et disque étaient faibles.

Je soupçonne que cela est dû à une connexion réseau lente. Comment puis-je le prouver?

Mettre à jour:

1) Il s'agit de requêtes SOAP Web Service, donc pas de graphiques intégrés, juste un HTTP POST avec une seule page XML de résultats.

2) De plus, j'ai reproduit cela en limitant la vitesse du réseau côté client et les symptômes sont exactement les mêmes.

3) Le problème est intermittent, ce qui signifie que la même demande est normalement rapide pour le client mais parfois lente. Je ne peux pas reproduire cela moi-même autrement qu'en étranglant le réseau. La journalisation ASP.NET du serveur montre qu'il est toujours rapide, mais la journalisation IIS le montre lent lorsque le client dit qu'il est lent.

4) Je n'ai accès qu'au serveur et je dois fournir autant d'informations que possible au client afin qu'ils acceptent que le problème ne soit pas sur le serveur et sachent quels journaux / outils exécuter sur le client pour trouver la cause première.

Jon
la source
Ces demandes sont-elles des vues de page normales qui nécessitent la récupération de graphiques d'intégration, etc.? Ou s'agit-il de requêtes automatisées qui ne renvoient qu'une seule page? Sommes-nous en train de mesurer le temps de chargement d'une page ou le temps de réponse à une seule requête HTTP?
David Schwartz

Réponses:

4

J'ai une situation où un client dira: "J'ai envoyé une demande à votre serveur Web à 10 h 03 min 24 s et cela a pris 20 secondes, pourquoi?". Je peux également voir cela dans les journaux IIS, mais le module ASP.NET du serveur l'a enregistré comme prenant 100 ms, et les compteurs CPU et disque étaient faibles.

Je soupçonne que cela est dû à une connexion réseau lente. Comment puis-je le prouver?

Cela commence par la recherche de paquets déposés entre le navigateur de votre client et toutes les sources d'images / scripts / html pour la page Web susmentionnée. Si vous trouvez des pertes de paquets cohérentes, alors vous savez avec certitude qu'il y a quelque chose dans le réseau qui doit être corrigé ... même si c'est juste un lien qui est surchargé. Les pertes de paquets ne sont pas la seule raison d'un réseau lent, mais c'est la source la plus courante de mon expérience. D'autres sources peuvent être un proxy ou un moteur de cache mal configuré. Malheureusement, je ne peux pas lister ici tous les coupables du réseau.

Cependant, les gens blâment souvent le réseau, alors qu'en fait les problèmes de vitesse sont bien sous leur contrôle. Explications possibles:

  • Supposons que le code HTML de cette page soit mal écrit et qu'il charge les scripts requis dans le mauvais ordre afin que la page entière s'affiche lentement, même si presque toutes les ressources étaient en place.
  • La page attend une ressource qui n'existe tout simplement pas et expire en attendant.
  • Un script est dans une boucle lente qui se bloque pendant un certain temps
  • Un moteur de cache met longtemps à fournir une image
  • Votre CGI recherche quelque chose dans une base de données et la recherche elle-même est lente
  • Vous utilisez Google Analytics , ce qui ralentit les choses en raison de la façon dont la page est écrite

Je pourrais continuer, mais le fait est que vous devez déterminer la raison exacte pour laquelle la page est lente vous-même. Un réseau défectueux est possible; il est également possible que d'autres facteurs contribuent à la lenteur des performances.

Pour diagnostiquer davantage:

  • Si la page se charge bien dans Firefox, l'onglet Réseau de Firebug est votre ami ( F12cliquez sur, puis allez dans l'onglet Réseau et rechargez la page). Firebug vous donne un joli diagramme en cascade pour savoir comment la page se charge et où sont les retardsCascade Firebug
  • Si la page se charge bien dans Chrome, vous pouvez faire quelque chose de similaire ( CntlShiftIcliquez sur l'onglet réseau, puis rechargez la page).Chrome
  • Si la page n'est prise en charge que dans IE (btw, honte à vos développeurs HTML), votre meilleur pari est de commencer à charger chacun de ces éléments de page ASP individuellement curljusqu'à ce que vous trouviez quelque chose qui semble beaucoup trop lent, puis découvrez pourquoi cet élément particulier est lent.

BTW, les exemples Chrome et Firefox ont utilisé une requête CGI de Debian.org ; ceci est un bon exemple de retard provenant d'une recherche CGI.

Lorsque tout le reste échoue, vous pouvez obtenir un .pcapauprès de wirehark et l'exécuter tcptrace; cependant, bien qu'il tcptracesoit très bon pour analyser les vidages de paquets, il n'y a aucune garantie que vous pouvez isoler le problème tcptraceseul. Consultez cette réponse pour plus d'informations sur l'utilisation des tcptracediagnostics.

Mike Pennington
la source
Voir mes mises à jour ci-dessus. Bien que vos informations soient très utiles dans le cas général, je ne pense pas qu'elles s'appliquent ici. La page n'est lente que par intermittence et les symptômes ne sont reproductibles que lorsque j'accélère le réseau côté client.
Jon
les graphiques en cascade dans firefox / chrome prennent en charge les opérations de publication http, ainsi que curl ... Je ne sais pas comment vous avez conclu que les informations ne s'appliquent pas, mais il semblerait que cela n'implique pas une application complète des outils contre le domaine du problème .
Mike Pennington
Firefox / chrome sont des outils côté client. Je n'ai accès qu'au serveur et je ne peux pas reprocher en utilisant mon propre client. Je dois dire, à partir du serveur uniquement, si une demande particulière a été lente en raison de problèmes de réseau. Cela laisse la capture de paquets, mais c'est trop lourd pour être laissé en production (considérez qu'une demande sur 10 000 peut être lente).
Jon
En tant qu'ingénieur réseau avec plus de 15 ans à mon actif, puis-je suggérer respectueusement que vous ne pouvez pas diagnostiquer un problème de services HTTP côté client uniquement à partir du serveur; vous n'avez tout simplement pas assez d'informations (ce qui est apparemment votre conclusion aussi ... cependant, vous ne semblez pas être disposé à vivre avec cette réalité :-).
Mike Pennington
Si la capture de paquets sur le serveur peut diagnostiquer des problèmes de réseau (par exemple en voyant un accusé de réception TCP lent), n'est-il pas raisonnable de s'attendre à ce qu'un outil / enregistreur plus léger puisse afficher la même chose?
Jon
0

Le résultat de l'article 944884 du Ko est que le temps réel nécessaire pour terminer la réponse peut ne pas être reflété avec précision dans le journal. C'est pourquoi l'article mentionne l'heure du réseau.

Si le symptôme est reproductible, j'effectuerais une capture de paquets côté serveur (et de préférence côté client également) pour voir l'heure réelle à laquelle la connexion a été reconnue par le client.

Greg Askew
la source
Merci, mais ce n'est pas reproductible autrement qu'en limitant la vitesse du réseau, et une capture de paquets est trop lourde pour être utilisée en production.
Jon
0

Le délai de 20 secondes peut également être dû au fait qu'IIS doit redémarrer son w3wp.exe qui se mettra en veille lorsqu'il n'est pas utilisé.

Steve Rollins
la source
1
Vous pouvez améliorer cette réponse en répondant à "comment dire". w3wp.exe s'endormir n'est pas pertinent dans mon cas car j'ai désactivé ce comportement, mais cela pourrait aider les autres.
Jon