Ho iniziato a vedere errori in un'app Web MVC su NetApp ospitata su Appharbor mentre era in esecuzione un thread in background, dopo un'attenta analisi, non riesco a capire la causa.Quali sono le possibili cause per IIS di generare un'eccezione ThreadAbortException e di riciclare il worker, con IIS che registra "IIS configuration change"?
In primo luogo, l'eccezione che ho notato è un ThreadAbortException
.
Tuttavia, questo significa solo che il thread viene ucciso. Prima che il thread venga ucciso, è possibile vedere un nuovo worker creato da IIS e Application_Start
viene chiamato sulla stessa macchina. Una volta che la nuova applicazione è attiva e funzionante, IIS elimina la vecchia app e le nuove richieste vengono gestite come previsto.
Allo stesso tempo, IIS registra un messaggio di:
ShutDown Message: IIS configuration change
HostingEnvironment initiated shutdown
HostingEnvironment caused shutdown
ShutDown Stack: at System.Environment.GetStackTrace(Exception e, Boolean needFileInfo)
at System.Environment.get_StackTrace()
at System.Web.Hosting.HostingEnvironment.InitiateShutdownInternal()
at System.Web.Hosting.HostingEnvironment.InitiateShutdownWithoutDemand()
at System.Web.Hosting.PipelineRuntime.StopProcessing()
In Net Health Monitor registrazione si ottiene un:
Message: Application is shutting down. Reason: Configuration changed.
Event Detail Code: 50004
Un google rapido rivela il codice sorgente ho il sospetto è il motivo per l'errore:
if (!HostingEnvironment.StopListeningWasCalled && !HostingEnvironment.ShutdownInitiated) {
// If GL_STOP_LISTENING wasn't triggered, the reset is likely due to a configuration change.
HttpRuntime.SetShutdownReason(ApplicationShutdownReason.ConfigurationChange, "IIS configuration change");
}
fonte: https://github.com/Microsoft/referencesource/blob/master/System.Web/Hosting/IPipelineRuntime.cs
012.Il mio primo pensiero è stato quello di controllare i timestamp per le modifiche ai file, sia nella cartella bin che nella directory principale dell'applicazione - tuttavia, questo errore viene generato senza modifiche al file. Dato che succede solo su Appharbor, non posso collegarmi al processo ed eseguire il debug in questo modo. Ho anche monitorato l'utilizzo della memoria e non vedo alcun problema lì.
Gli stati del codice sorgente:
If GL_STOP_LISTENING wasn't triggered, the reset is likely due to a configuration change.
Quindi, ciò che altro potrebbe essere la causa l'errore e l'applicazione di riciclo, se gli altri file web.config/config non stanno cambiando?
Hai accesso al registro eventi di Windows? Hai provato a chiedere ad AppHarbor? –
Sì: asp health monitoring restituisce al mio DB qualsiasi evento, ma semplicemente dichiara: "L'applicazione si sta spegnendo. Motivo: configurazione modificata." - Appharbor dice di non sapere perché sta accadendo e non può fare altro (oltre a suggerire di ri-progettare la mia applicazione). – dazbradbury
* monitoraggio della salute * non cattura tutti gli eventi che possono essere registrati nel registro eventi di Windows. Un processo esterno può fare cose e può registrarlo nei registri eventi di Windows. Inoltre * AppHarbor * utilizza un pool di applicazioni * dedicato * per la tua applicazione? –