2015-07-23 14 views
5

Sto cercando nel modulo di inizializzazione dell'applicazione IIS e da quello che posso vedere, quando si utilizza l'opzione AlwaysRunning per l'impostazione della modalità di avvio per il pool di applicazioni, in pratica inizia un nuovo processo di lavoro che sarà sempre corri anche se non ci sono richieste. Quando si applica questa opzione, avvia automaticamente il processo.Modulo di inizializzazione dell'applicazione IIS e gestione della memoria

La mia preoccupazione è la gestione della memoria e l'utilizzo della CPU, in particolare come viene gestita dal momento che il processo viene eseguito sempre.

Come posso confrontarlo con l'impostazione della Modalità di avvio su OnDemand e aumentare i minuti di inattività a un paio di giorni? In questo modo, immagino, il processo verrà eseguito in modalità inattiva per x giorni prima che venga terminato e reinizializzato alla successiva richiesta e continuerà a funzionare per un paio di giorni. Se si impostano i minuti, ad esempio 1,5 giorni, qualcuno è destinato a utilizzare l'applicazione almeno una volta al giorno, in modo tale da mantenere inalterato il runtime del processo e non verrà mai terminato.

Qualcuno può condividere esperienza su questo argomento?

Grazie

risposta

2

ho applicazione multisito che corre pochi siti sotto piscine app separate. Tutti sono impostati su OnDemand per Start Mode e IdleTime per 1740 minuti, inoltre utilizzo Page Output Cache dall'app con tempi diversi per diversi tipi di pagina. C'è anche NHibernate dietro la scena e DB è MySql.

Il sito più attivo ha più di 100.000 visite al giorno e quasi mai è inattivo. Quando si avvia se riciclo, sono necessari da 30 secondi a 2 minuti per diventare pienamente operabili a seconda delle richieste al momento e l'utilizzo della CPU passa dal 40% al 70%. Dopo che il sito è attivo, l'utilizzo della CPU è molto basso (0-4%) se non ci sono nuove voci nel DB e l'utilizzo della memoria è di circa 3 GB quando tutto è memorizzato nella cache. A volte la CPU raggiunge il 20% se in quel momento sono nuove richieste (per i contenuti non memorizzati nella cache) e c'è un nuovo salvataggio delle voci. Anche la cache di output della pagina funziona su base First Come First Served, quindi forse questo può anche causare piccoli problemi mentre il caching è fatto - l'utente deve attendere, un po 'più di CPU per fare il caching.

Il problema più grande nel mio caso è l'utilizzo di NHibernate e MySql ma Page Output Cache ha risolto il problema per me quando ho deciso di memorizzare nella cache i moduli e il contenuto della pagina. Mi rendo conto che è l'applicazione migliore a morire di fame per la memoria, quindi per la CPU. 3.5k visitatori in un momento in cui tutto è memorizzato nella cache mi ha dato lo stesso utilizzo di memoria (3 GB) e CPU (server in generale) circa il 40% Altri siti utilizzano circa 1-1,5 GB di memoria e CPU mai più del 20% all'avvio. L'applicazione con le stesse impostazioni per il pool di applicazioni e l'utilizzo di MSSQL con EF I non può nemmeno notare che viene eseguita sul server. Viene utilizzato da 10-60 utenti al minuto, non c'è molto contenuto tranne i codici di incorporamento e utilizza CPU 1-5% e mai più di 8 MB di memoria. Al momento del riciclo, dura meno di 10 secondi.

Con questa mia esperienza posso dire che tutto dipende da quale applicazione serve e come funziona :) e quanto contenuto avete.

Se si utilizza OnDemand con IdleTime lungo, sarà uguale a AlwaysStart e il processo non viene utilizzato in quel momento. Se usi OnDemand con IdleTime breve più spesso avrai bisogno della CPU per avviare il processo.

Problemi correlati