Best practice per il pool di applicazioni IIS 7.x.


24

Stiamo per distribuire un sacco di siti su alcuni nuovi server. Ho le seguenti domande sui pool di applicazioni:

  1. Sembra consigliabile disporre di un pool di applicazioni per sito Web. Ci sono avvertenze su questo approccio? Un pool di applicazioni può racchiudere tutta la CPU, la memoria, ecc ...?

  2. Quando è necessario consentire più processi di lavoro in un pool di applicazioni? Quando non dovresti?

  3. È possibile utilizzare il limite di memoria privata per impedire a un pool di applicazioni di interferire con un altro? L'impostazione su un valore troppo basso causerà richieste valide per riciclare il pool di applicazioni senza ottenere una risposta valida?

  4. Qual è la differenza tra i limiti di memoria privata e virtuale?

  5. Ci sono validi motivi per NON eseguire un pool di applicazioni per sito?


La prima domanda che ti è stata data: questi siti web (es. .Htm / .js) o applicazioni web (es. .Aspx / .php)?
Coding Gorilla,

Principalmente applicazioni .Net 3.5. Uno è un'applicazione PHP di terze parti.
Eric Burcham,

1
Si tratta di una vasta gamma di argomenti - L'argomento (e le risposte di @ CodingGorilla) sono interessanti, ma potrebbe non essere la soluzione migliore per lo stile Q-and-A di
SF

Risposte:


20

1) Sembra consigliabile disporre di un pool di applicazioni per sito Web. Ci sono avvertenze su questo approccio? Un pool di applicazioni, ad esempio, può racchiudere tutta la CPU, la memoria, ecc ...?

Questo è un approccio piuttosto valido; non ci sono buoni motivi a cui posso pensare di avere diversi "siti" (applicazioni) che condividono lo stesso pool. A meno che non debbano condividere una singola risorsa di qualche tipo. Un'applicazione potrebbe teoricamente contenere molta CPU o memoria, ma cambiare il modo in cui le applicazioni vengono messe in comune non influirà molto su questo.

2) Quando è necessario consentire più processi di lavoro in un pool di applicazioni. Quando non dovresti?

È meglio lasciarlo solo, usando le impostazioni predefinite. A meno che tu non sappia davvero cosa stai facendo, questo può effettivamente avere un impatto negativo sul tuo sito Web / applicazione.

3) È possibile utilizzare il limite di memoria privata per impedire a un pool di applicazioni di interferire con un altro? L'impostazione su un valore troppo basso causerà richieste valide per riciclare il pool di applicazioni senza ottenere una risposta valida?

a) Teoricamente

b) Sì, impostarlo su Abbassa può avere effetti negativi. Ancora una volta, a meno che tu non abbia esigenze specifiche e non sappia cosa stai facendo, lascia queste da sole.

4) Qual è la differenza tra i limiti di memoria privata e virtuale?

È molto complicato, ecco un breve post che ho trovato che potrebbe aiutare: http://cybernetnews.com/cybernotes-windows-memory-usage-explained/

5) Esistono validi motivi per NON eseguire un pool di applicazioni per sito?

Ancora una volta, l'unica ragione a cui riesco a pensare è se c'è una sorta di "risorsa condivisa" di cui hanno bisogno le applicazioni multiple, quindi vorresti eseguirle nello stesso processo.

Per applicazioni e siti Web per scopi generici, IIS è abbastanza ben impostato con i suoi valori predefiniti.

****AGGIORNARE****

Per quanto riguarda la tua richiesta di ulteriori informazioni su # 2, non dovresti farlo a meno che tu non abbia una specifica necessità di farlo. Anche con azioni del server che richiedono molto tempo, le richieste vengono servite utilizzando più thread e si desidera utilizzare "Richieste asincrone" per gestire attività di lunga durata (che libera un thread del pool di thread per gestire altre richieste). Realisticamente, non riesco a pensare a nessuna buona ragione per consentire più processi per un singolo pool.

Una volta che inizi a parlare di più processi, allora potresti imbatterti in cose come: perdere lo stato della sessione perché una sessione è viva nel processo 1, ma la richiesta viene gestita dal processo 2. O peggio ancora, devi capire come fare alcune comunicazioni tra processi, il che è un vero dolore.

Indipendentemente da cosa vieni in merito a un motivo per più processi, sarei disposto a scommettere che esiste un modo migliore per affrontarlo (piuttosto che avviare un altro processo).


Apprezzo la risposta ponderata e l'ho accettata. Se hai informazioni più specifiche su # 2, le sarei grato. "Il migliore da solo" è certamente un saggio consiglio, ma quando è bene usare più processi di lavoro sarebbe bene sapere. Presumo che ciò sia più rilevante quando si hanno alcune azioni del server che impiegano molto tempo per restituire una risposta, come un grande report, un servizio Web che accetta post di grandi dimensioni e simili. Suppongo anche che si applichino tutte le normali cose sulla concorrenza dei thread?
Eric Burcham,

Solo per aggiungere: se si prevede che le app funzionino male insieme, la finestra di dialogo di installazione per IIS rileva che Gestione risorse di sistema di Windows può essere installato e utilizzato per limitare l'utilizzo della CPU e della memoria da parte dei pool di app.
TristanK,

@TristanK, grazie per il suggerimento. È stato di grandissimo aiuto.
Eric Burcham,

@Coding Gorilla - Grazie ancora per l'intuizione. Ho deciso di scavare seriamente nel "perché usare un web garden" e ho avuto diverse risposte. Si applicano tutte le avvertenze menzionate, in particolare per quanto riguarda l'accesso asincrono a risorse condivise come varie cache e sessioni utente. La funzione web garden consente essenzialmente di caricare le richieste di bilanciamento su un singolo server con più di un core. Quindi, devi affrontare tutte le avvertenze che normalmente gestisci in uno scenario di bilanciamento del carico, ad eccezione del routing delle richieste.
Eric Burcham,

@Coding Gorilla - Continua ... Il miglior "motivo" che ho scoperto per utilizzare la funzionalità del processo a più lavoratori è quello di aumentare le prestazioni. Dai un'occhiata a questo link: iis-aid.com/articles/performance_testing/… . Ovviamente, faresti meglio a sapere cosa stai facendo con tutti gli aspetti asincroni della programmazione che spesso trascuriamo di prendere in considerazione con i siti Web, poiché la maggior parte di essi (almeno per cominciare) esegue un singolo thread di lavoro. Quindi la risposta breve alla mia domanda è: provalo se riscontri problemi di prestazioni.
Eric Burcham,

4

Configuro sempre un pool di applicazioni dedicato per un sito Web. Gli scenari di hosting di siti Web a basso costo sono quelli in cui è sensato avere un gran numero di siti per pool di applicazioni.

I limiti di memoria sono in realtà solo soglie di sicurezza primitive per impedire a un sito di consumare tutte le risorse di sistema. Si noti che questo è più un potenziale problema su Windows 2008 R2 x64 che su IIS 6.0 x86, poiché le applicazioni x86 avevano un limite di memoria naturale di 2 GB. Su IIS 7.5 è molto più semplice per un'applicazione con una perdita di memoria consumare grandi quantità di memoria.

Inoltre, non sono un grande fan del riciclo dei pool di applicazioni. Se ho un pool di applicazioni e sono l'unica applicazione in esecuzione, se non c'è nulla di sbagliato nel nostro codice, probabilmente non è necessario riciclare il pool di app. E se c'è un difetto nell'applicazione, l'ultima azione appropriata sarebbe quella di correggere il codice.


Grazie per aver sottolineato il limite di 32 bit in memoria. Non so come dimentico queste cose. Penso anche che l'approccio corretto se si dispone di un'applicazione sufficientemente difettosa da arrestare in modo anomalo un pool di app consiste nel risolverlo, supponendo che si abbia accesso al codice. Apprezzo il consiglio!
Eric Burcham,

Abbiamo fatto alcuni test per conto nostro. L'esecuzione di un pool di applicazioni sembra avere un sovraccarico di circa 64 KB per pool di app sopra l'esecuzione delle applicazioni tutte nello stesso pool di applicazioni. Ciò avviene in un periodo di campionamento di 12 ore utilizzando il monitor delle prestazioni per monitorare il consumo di memoria. Questo era su un server a 64 bit. Penso che se questo semplice test risulta corretto, il costo delle risorse di un pool di app per applicazione è sostanzialmente trascurabile sull'hardware moderno.
Eric Burcham,
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.