2010-03-09 19 views
5

Sto eseguendo un'applicazione ASP.NET su un server IIS7. Funziona bene da molto tempo, ma da una settimana o giù di lì ha abbandonato tutte le sessioni degli utenti più volte al giorno. Ho attivato tutte le opzioni di registrazione del riciclo del pool di applicazioni come descritto in http://blogs.iis.net/ganekar/archive/2008/12/12/iis-7-0-application-pool-recycles-log-a-event-in-windows-event-log.aspx, ma non ho ricevuto nulla nel mio registro eventi.Come determinare il motivo per cui la mia applicazione ASP.NET si sta riciclando

Non ci sono errori nel registro eventi e nessun sintomo visibile tranne che tutti i miei utenti perdono le sessioni.

Esistono altri motivi per cui IIS ricicla il mio pool di applicazioni? C'è qualche altro tipo di registrazione che posso abilitare per scoprire cosa sta succedendo?

+0

Ho trovato ulteriori informazioni. Ho scritto uno script per registrare l'ID del processo di lavoro IIS ogni ora.Il problema della sessione è successo di nuovo stamattina, ma quando ho controllato il log, ha mostrato che l'ID del processo è rimasto lo stesso. Quindi, non sembra che questo stia accadendo a causa di un riavvio del processo di lavoro. –

+0

Ho caricato Process Monitor sul server e ho utilizzato le istruzioni da http://weblogs.asp.net/scottgu/archive/2005/12/14/433194.aspx per scrivere una voce del registro eventi ogni volta che l'applicazione termina. E 'successo di nuovo oggi, e il messaggio registrato era "Notifica di cambio di rename di directory per" C: \ inetpub \ wwwroot \ ". Cambia dir di JobTraQ o rinominazione di directory." Process Monitor mostrava molti eventi "NotifyChangeDirectory", ma non so da dove venissero. –

risposta

6

Quando si verifica questo comportamento, quanto tempo è stata eseguita una distribuzione dei file sul server?

C'è un'opzione di configurazione denominata brutta numRecompilesBeforeAppRestart sul cartellino compilazione:

<system.web> 
    <compilation debug="true" numRecompilesBeforeAppRestart="15"> 

http://msdn.microsoft.com/en-us/library/system.web.configuration.compilationsection.numrecompilesbeforeapprestart.aspx

default questo valore a 15. Sono stato attraverso un'applicazione uccidendo tutte le sessioni utente prima e questo è stato il colpevole per me. Per circa un giorno dopo l'aggiornamento di un'applicazione Web leggermente utilizzata (nuovi file copiati sul server, questo ha finito per sovrascrivere TUTTI i file, numerandoli in centinaia), avremmo ottenuto riavvii AppDomain costanti evidenziati da tutti i valori di sessione per tutti gli utenti che scomparivano.

ho trovato questo bug report che elenca il comportamento che sto vivendo: http://support.microsoft.com/kb/319947

Ecco la veramente importante testo pertinente alla mia situazione:

Tuttavia, questo problema si verifica quando si carico molti nuovi file .aspx o .ascx su server (ad esempio, 61 file). Il server scarica l'applicazione quando le prime 15 file vengono ricompilati e ogni volta altri 15 file sono ricompilato fino a quando il server raggiunge 61. Ciò si traduce in quattro applicazione riavvia anche se solo uno è richiesto.

Ho impostato il valore su 99999 e il problema è andato via. Ciò significa che più memoria si accumulerà nel mio processo di lavoro, quindi ho aggiunto un riciclo giornaliero (3:00 quando il mio sito non ha utenti) alle impostazioni di riciclo di IIS AppPool.

+0

+1 bel link ... – slugster

+1

Speriamo che ora sia su SO, sarà più facile trovarlo tramite Google. –

+0

Questo era un articolo interessante, ma il mio problema è diverso. Questo bug sembra implicare il riavvio di più applicazioni in un breve periodo di tempo dopo un grande aggiornamento. Il nostro ultimo aggiornamento è stato circa una settimana fa, e le riavvii sembrano avvenire su intervalli di tempo più lunghi. –

0

È possibile impostare le opzioni nel metabase per registrare i diversi tipi di eventi di riciclo nel registro eventi.

Per IIS 6.0, vedere http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/87892589-4eda-4003-b4ac-3879eac4bf48.mspx

Ad esempio, per abilitare la registrazione degli eventi di riciclo a causa di superamento del limite di memoria privata, eseguire questo sul vostro web server:

cd %systemroot%\inetpub\adminscripts 
cscript.exe adsutil.vbs set w3svc/AppPools/YOUR_APP_POOL_NAME/AppPoolRecyclePrivateMemory true 

Ecco un link per [diverse] istruzioni per IIS 7.0: http://technet.microsoft.com/en-us/library/cc771318%28v=ws.10%29.aspx

Problemi correlati