Come posso riscaldare la mia webapp asp.net mvc dopo il riciclo di un pool di app?


23

Sto eseguendo una webapp ASP.NET MVC in IIS 8.0. La mia applicazione deve essere riscaldata prima di accettare le richieste. Abbiamo già un processo per riscaldare automaticamente l'applicazione quando distribuiamo un nuovo codice. Tuttavia, stiamo assistendo a periodici eventi di riciclo del pool di app che causano il mancato riscaldamento dell'app.

Esiste una procedura ottimale per rilevare un evento di riciclo del pool di app ed eseguire uno script o del codice?

Risposte:


55

Ci sono diverse cose che puoi fare:

1. Inizializzazione dell'applicazione

È possibile utilizzare il modulo di inizializzazione dell'applicazione fornito con IIS 8.0

puoi avere qualcosa del genere nel tuo web.config

<applicationInitialization
     doAppInitAfterRestart="true" >
   <add initializationPage="/" />
</applicationInitialization>

Questo invierà una richiesta alla radice dell'app ( initializationPage="/") ogni volta che l'app si avvia automaticamente.

Puoi anche configurare la modalità di avvio per il tuo pool di applicazioni, il Always Runningche significa che ogni volta che IIS si riavvia, si assicurerà di avviare immediatamente il tuo pool di applicazioni (questo se fai clic con il pulsante destro del mouse sul pool di applicazioni, quindiAdvanced Settings

inserisci qui la descrizione dell'immagine

e Preloadper il tuo sito stesso (fai clic con il tasto destro sul sito, Manage SitequindiAdvanced Settings

inserisci qui la descrizione dell'immagine

2. Disabilitare il timeout di inattività

Inoltre è possibile disabilitare idleTimeout (per impostazione predefinita IIS arresta l'app dopo 20 minuti di attività in) modificando in in Idle Time-outper il pool di applicazioni su 0 (infinito)

inserisci qui la descrizione dell'immagine

3. Disabilitare il riciclaggio periodico

anche disattivato Regular Time Interval (minutes)per impostazione predefinita, IIS riciclerebbe l'app ogni 29 ore.

inserisci qui la descrizione dell'immagine

Per


3
I commenti sugli svantaggi di queste impostazioni sarebbero apprezzati. Sicuramente c'è un motivo per cui non sono impostazioni predefinite.
user42134

2
Certo, elevato consumo di memoria se si eseguono più siti sulla stessa casella IIS poiché tutti i siti rimangono sempre attivi, il che porta a una densità di sito molto bassa. Inoltre, nessuna protezione contro le perdite di memoria nelle applicazioni. Tieni presente che IIS esisteva prima che le lingue gestite diventassero popolari per il web e molte app eseguissero gestori nativi che entravano in perdite di memoria e in strani stati se lasciati in esecuzione per molto tempo. Ciò è stato fatto per aiutare gli amministratori di sistema che hanno dovuto svegliarsi nel cuore della notte per ripristinare i server a causa di problemi con l'app. Sono ancora predefiniti principalmente per ragioni di comparabilità all'indietro
ahmelsayed

1
Alternative in IIS 7.5 - Windows Server 2008 R2 ?
Kiquenet,

2
È possibile far funzionare Application Initialization Module per IIS 7.5 per il n. 1. # 2 e # 3 sono applicabili così come sono a IIS 7.5
ahmelsayed

1
Cordiali saluti per le persone che usano questo: the applicationInitializationinto into<configuration><system.webServer>
Paul

1

Dalla mia esperienza, AlwaysRunning e Preload abilitati non ottengono molta velocità. Il tempo di attesa maggiore è rappresentato dalla compilazione dinamica (che può essere risolta con aspx precompile) e dal caricamento degli assembly nella memoria e nella memorizzazione nella cache.

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.