IIS: come stabilire se un tempo lento è dovuto a una connessione di rete lenta


10

Secondo http://support.microsoft.com/kb/944884 , "quando una risposta di grandi dimensioni o risposte di grandi dimensioni vengono inviate a un client tramite una connessione di rete lenta, il valore del campo tempo impiegato potrebbe essere più del previsto".

Ho una situazione in cui un client dirà "Ho inviato una richiesta al tuo server Web alle 10:03:24 e ci sono voluti 20 secondi, perché?". Lo vedo anche nei registri IIS, ma il modulo ASP.NET del server lo ha registrato impiegando 100 ms e i contatori CPU e disco erano bassi.

Ho il sospetto che sia dovuto a una connessione di rete lenta. Come posso provarlo?

Aggiornare:

1) Queste sono richieste del servizio Web SOAP, quindi nessuna grafica incorporata, solo un POST HTTP con una singola pagina XML di risultati.

2) Inoltre, l'ho riprodotto limitando la velocità della rete sul lato client e i sintomi sono esattamente gli stessi.

3) Il problema è intermittente, il che significa che la stessa richiesta è normalmente veloce per il client ma occasionalmente lenta. Non posso riprodurlo da solo se non limitando la rete. La registrazione ASP.NET del server lo mostra sempre velocemente, ma la registrazione IIS lo mostra lentamente quando il client dice che è lento.

4) Ho solo accesso al server e ho bisogno di fornire quante più informazioni possibili al client in modo che accettino che il problema non si trovasse sul server e che sappiano quali strumenti / log da eseguire sul client per trovare la causa principale.


Queste richieste sono normali visualizzazioni di pagina che richiedono il recupero della grafica incorporata e così via? O sono query automatizzate che restituiscono solo una singola pagina? Stiamo effettivamente misurando il tempo per caricare una pagina o il tempo per rispondere a una singola richiesta HTTP?
David Schwartz,

Risposte:


4

Ho una situazione in cui un client dirà "Ho inviato una richiesta al tuo server Web alle 10:03:24 e ci sono voluti 20 secondi, perché?". Lo vedo anche nei registri IIS, ma il modulo ASP.NET del server lo ha registrato impiegando 100 ms e i contatori CPU e disco erano bassi.

Ho il sospetto che sia dovuto a una connessione di rete lenta. Come posso provarlo?

Inizia con la ricerca di pacchetti tra il browser del tuo client e tutte le fonti di immagini / script / html per la suddetta pagina web. Se trovi cadute di pacchetti coerenti, allora sai per certo che c'è qualcosa nella rete che deve essere riparato ... anche se è solo un collegamento che è sovraccarico. I drop di pacchetti non sono l'unica ragione per una rete lenta, ma è la fonte più comune nella mia esperienza. Altre fonti potrebbero essere un proxy o un motore cache configurato in modo errato. Purtroppo, non posso elencare qui tutti i possibili colpevoli della rete.

Tuttavia, le persone spesso danno la colpa alla rete, quando in realtà i problemi di velocità sono ben sotto il loro controllo. Possibili spiegazioni:

  • Supponiamo che l'HTML per quella pagina sia stato scritto male e che carichi gli script richiesti nell'ordine sbagliato in modo che l'intera pagina venga visualizzata lentamente, anche se quasi tutte le risorse erano a posto.
  • La pagina è in attesa di una risorsa che semplicemente non esiste e scade durante l'attesa.
  • Uno script è in un ciclo lento che si blocca per un po '
  • Un motore di cache impiega molto tempo a consegnare un'immagine
  • Il tuo CGI sta cercando qualcosa in un database e la ricerca stessa è lenta
  • Stai utilizzando Google Analytics , che rallenta le cose a causa del modo in cui la pagina è scritta

Potrei continuare, ma il punto è che devi inchiodare il motivo esatto per cui la pagina è lenta da solo. È possibile una rete difettosa; è anche possibile che altri fattori contribuiscano alla prestazione lenta.

Per diagnosticare ulteriormente:

  • Se la pagina si carica bene in Firefox, la scheda Rete in Firebug è tua amica (Hit F12, quindi vai alla scheda Rete e ricarica la pagina). Firebug ti offre un bel diagramma a cascata su come viene caricata la pagina e dove sono i ritardiCascata Firebug
  • Se la pagina si carica bene in Chrome, puoi fare qualcosa di simile (Hit CntlShiftI, fai clic sulla scheda di rete e ricarica la pagina).Cromo
  • Se la pagina è supportata solo in IE (tra l'altro, peccato per i tuoi sviluppatori HTML), la soluzione migliore è iniziare a caricare ciascuno di questi elementi della pagina ASP singolarmente con curlfino a quando non trovi qualcosa che sembra troppo lento, quindi scopri perché quel particolare elemento è lento.

A proposito, gli esempi di Chrome e Firefox hanno usato una query CGI da Debian.org ; questo è un buon esempio di ritardo derivante da una ricerca CGI.

Quando tutto il resto fallisce, puoi ottenere un .pcapda WireShark ed eseguirlo tcptrace; tuttavia, mentre tcptraceè molto bravo nell'analizzare i dump di pacchetti, non ci sono garanzie che tu possa isolare il problema da tcptracesolo. Vedi questa risposta per informazioni sull'uso della tcptracediagnostica.


Vedi i miei aggiornamenti sopra. Mentre le tue informazioni sono molto utili nel caso generale, non penso che si applichino qui. La pagina è lenta a intermittenza e i sintomi sono riproducibili solo quando si limita la rete sul lato client.
Jon

i grafici a cascata in Firefox / Chrome supportano le operazioni di post HTTP, oltre all'arricciatura ... Non sono sicuro di come tu abbia concluso che le informazioni non si applicano, ma sembrerebbe che non implichi un'applicazione completa degli strumenti contro il dominio problematico .
Mike Pennington,

Firefox / Chrome sono strumenti lato client. Ho solo accesso al server e non riesco a riprogrammare usando il mio client. Devo dire, solo dal server, se una particolare richiesta è stata lenta a causa di problemi di rete. Questo lascia l'acquisizione dei pacchetti, ma è troppo pesante per essere lasciato in produzione (considerare 1 su 10.000 richieste potrebbe essere lento).
Jon

Come ingegnere di rete con oltre 15 anni alle spalle, posso suggerire rispettosamente che non è possibile diagnosticare un problema di servizi HTTP sul lato client dal solo server; semplicemente non hai abbastanza informazioni (che a quanto pare è anche la tua conclusione ... tuttavia, non sembri essere aperto a vivere con questa realtà :-).
Mike Pennington,

Se l'acquisizione di pacchetti sul server è in grado di diagnosticare problemi di rete (ad es. Tramite la visualizzazione di un TCP lento ack), non è ragionevole aspettarsi che uno strumento / logger più leggero possa mostrare lo stesso?
Jon

0

Il risultato dell'articolo 944884 di KB è che il tempo effettivo necessario per completare la risposta potrebbe non essere riflesso accuratamente nel registro. Ecco perché l'articolo menziona il tempo di rete.

Se il sintomo è riproducibile, eseguirò un'acquisizione di pacchetti sul lato server (e preferibilmente anche sul lato client) per vedere i tempi effettivi in ​​cui la connessione è stata riconosciuta dal client.


Grazie, ma non è riproducibile se non tramite la limitazione della velocità della rete e un'acquisizione di pacchetti è troppo pesante per essere utilizzata in produzione.
Jon

0

Il ritardo di 20 secondi potrebbe anche essere causato dal fatto che IIS deve riavviare w3wp.exe che andrà in sospensione quando non viene utilizzato.


1
Puoi migliorare questa risposta rispondendo a "come dirlo". La sospensione di w3wp.exe non è rilevante nel mio caso poiché ho disabilitato quel comportamento, ma questo potrebbe aiutare gli altri.
Jon,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.