Domanda

Abbiamo un app ASP.Net, che si comporta stranamente sotto IIS6. L'applicazione in sé è semplice ASP.Net 2.0 Webforms affare, niente di troppo strano sta succedendo in là (ci sono moduli HTTP paio in cantiere, ma non avrebbe preso in considerazione quegli strani :)). La cosa che non capisco è il tempo di esecuzione pagina, o, più specificamente, la differenza tra il tempo riportato da ASP.Net tracciando (trace.axd) e osservato da parte del cliente (Fiddler). Quando l'applicazione viene eseguito sulla scatola dello sviluppatore (WinXP, IIS5.1), i tempi riportati da ASP.Net e Fiddler sono molto vicine:

Page exec time             :  0.0919834
Fiddler Total Sequence time:  0.1560980 

Posso capire 60ms spesi ottenere 5 KB vale la pena di dati da IIS a Fiddler (entrambi che corrono sulla stessa macchina, BTW). Ora, quando ci muoviamo il codice al server (Win2k3, IIS6), il quadro cambia radicalmente:

Page exec time             :  0.1702014
Fiddler Total Sequence time:  0.5156283 

Questa è stessa pagina, e Fiddler è di nuovo in esecuzione sulla stessa macchina con il codice. Perché improvvisamente prende 350ms per fornire la stessa 5KB?

PS. Su entrambe le macchine i risultati sono ottenuti accedendo all'URL tramite il nome della macchina reale, ad esempio http: //machinename/app/page.aspx (al contrario di http: //localhost/app/page.aspx ).

PPS. Configurazione-saggio, le impostazioni di una casella di dev e il server sono il più vicino li potremmo fare - entrambi utilizzano la stessa identica web.config. Sia colpito il DB (SQL Server) con autenticazione integrata, e, di conseguenza, l'applicazione viene eseguito con un account di dominio. L'applicazione utilizza l'autenticazione forme, e non rappresenta (vale a dire che gira sempre con lo stesso account). Ora, il modo in cui questo funziona su IIS 5 è diverso da IIS6 - su IIS 5 è specificato l'account nel tag nel machine.config, e IIS6 è l'impostazione AppPool. La configurazione sembra abbastanza tipico per entrambi gli ambienti, e non riesco a immaginare che causano ritardi 350ms ...

È stato utile?

Soluzione

Dopo spendere uno dei pochi preziosi interventi di supporto che abbiamo con il nostro abbonamento MSDN, ho finalmente so la risposta corretta alla domanda "dove viene speso tutto questo tempo". In breve, il tempo è trascorso in moduli HTTP che abbiamo nella nostra pipeline. Le misure di tempo riportati da ASP.Net trace.axd registrare solo il tempo trascorso nella pagina aspx in sé, i moduli sono non inclusi.

Un modo semplice per verificare questo (e vedere quanto tempo fa ogni modulo prendere per fare la sua cosa) è quello di utilizzare l'ETW (Event Tracing for Windows). Ecco la spiegazione (ho il forte sospetto che questo post è stato scritto dopo aver guardato il nostro caso :)) una cosa che posso aggiungere alla descrizione eccellente di cui sopra è che ho usato il SvcTraceViewer invece di LogParser per analizzare l'output di traccia.

Aggiornamento: l'approccio di cui sopra funziona anche su Windows Server 2008, basta assicurarsi che si dispone di ricalco installato .

Altri suggerimenti

Fare un trace route sull'URL che si sta chiamando e confrontarli. Sto scommettendo con la macchina sviluppatore si alloggia interno alla macchina, ma sulla macchina di produzione si sta andando esterno e poi tornare attraverso l'indirizzo IP.

Se questo è il caso prova ad aggiungere questo al vostro file hosts (C: \ windows \ system32 \ drivers \ etc \ hosts

www.mysite.com    127.0.0.1

Questo farà in modo la vostra richiesta non avventurarsi al di fuori della macchina per effettuare la richiesta. Si dovrebbe vedere i tempi di risposta per iniziare a venire in linea con l'altro.

Aggiorna

Dati i nuovi aggiornamenti. Se il server è sotto carico, mentre il test sulla produzione questo potrebbe spiegare la differenza, perché sta attivamente cercando di fornire più richieste rispetto alla macchina di sviluppo, che sta solo cercando di fornire 1.

O potrebbe essere dovuto al fatto che si sta testando due differenti versioni di IIS, 5.1 su XP e 6.0 rispetto al 2003. Davvero non si può spiegare le differenze a meno che i due ambienti sono in esecuzione lo stesso software.

è l'applicazione in esecuzione in configurazioni di rilascio identici su entrambe le scatole?

EDIT: La richiesta gasdotto cambiato enormemente tra IIS5 e IIS6, trace.axd è solo andare a vedere la parte ASP.NET di esso, non la nuova piscina app e HTTP.SYS componenti

.

Mi immagino che la configurazione può essere regolata su IIS6 un po ', ma si sta probabilmente guardando la differenza di un web server leggero non di produzione (IIS 5) ed un server web robusto con pool di applicazioni individuali da gestire e più strati di astrazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top