Limiti della CPU per i pool di applicazioni in IIS 7.5


8

Vedo che in Iis 7.5 posso impostare un limite di utilizzo% CPU per un periodo di tempo specificato per un pool di applicazioni. Posso anche far uccidere il processo di lavoro se questo limite viene violato. Se glielo dico, il processo di lavoro si riavvierà automaticamente dopo essere stato ucciso o è necessario un intervento manuale?

Oltre a Stack Overflow v'è la menzione che si può riavviato al termine dell'intervallo di ...

Risposte:


4

Questo sembra uno di quei casi in cui la simulazione (o l'accesso al codice sorgente ...> sigh <) sarà probabilmente l'unico modo per vedere quale sia il comportamento con un certo grado di sicurezza.

La documentazione per la voce del registro eventi per il riciclaggio delle quote CPU parla del riciclaggio come segue:

Per impostazione predefinita, il riciclo del pool di applicazioni è sovrapposto, il che significa che il processo di lavoro che deve essere chiuso viene mantenuto in esecuzione fino a quando non viene avviato un nuovo processo di lavoro. Dopo l'avvio di un nuovo processo di lavoro, le nuove richieste vengono passate ad esso. Il vecchio processo di lavoro si arresta al termine dell'elaborazione delle richieste esistenti o dopo un timeout configurato, a seconda dell'evento che si verifica per primo. Questo modo di riciclaggio garantisce un servizio ininterrotto ai clienti. Tuttavia, se un'applicazione nel pool di applicazioni non può eseguire più di un'istanza alla volta, la rotazione sovrapposta può essere disabilitata.

Mi sembra che, per definizione, terminare un processo di lavoro a causa dell'eccessivo consumo di CPU significherebbe che le richieste in sospeso non potrebbero essere completate (dal momento che stanno esaurendo la quota della CPU).

Per parlare con la tua principale preoccupazione: non vedo nulla che mi induca a credere che un nuovo processo di lavoro non verrebbe avviato automaticamente. L'affermazione nel link Stack Overflow mi fa dubitare che l'algoritmo utilizzato da IIS possa, in effetti, associare il riciclaggio alla risoluzione del timer utilizzato per misurare l'esaurimento delle quote della CPU. Il modo migliore che conosco per determinare che sarebbe scrivere un componente lato server dispendioso dalla CPU, distribuirlo in un ambiente di test e vedere come agisce il suo comportamento di riciclaggio. Un componente semplice che si trova in un circuito stretto per alcuni secondi e quindi restituisce una stringa nota, combinato con un client che esegue un cablaggio di prova con qualcosa come un pool di processi "wget" paralleli potrebbe essere sufficiente.


Ya sembra che dovrei solo provarlo. Ho già scritto uno script di test una tantum in Python per testare questo genere di cose che è tornato utile ... ho dovuto usare la versione compromessa del socket e della libreria http in modo da poter legare a IP di origine diversi :-)
Kyle Brandt

Una richiesta potrebbe essere sufficiente però ... app web che calcola pi ...
Kyle Brandt,

@Kyle: non farò una richiesta infinita, comunque. Farei qualcosa che, una volta che ricevi alcune richieste "in volo", satura la CPU del server ma alla fine restituisce un risultato. In questo modo il tuo banco di prova può segnalare il successo / fallimento di tutte le richieste che fa. Altrimenti non hai idea se il comportamento del riciclaggio si traduca effettivamente in un'interruzione del servizio per i clienti o meno.
Evan Anderson,

Oh, capisco quello che stai dicendo ... non era davvero l'obiettivo principale di questo test ... ma una buona informazione da avere. Voglio solo vedere quando viene ucciso, torna o no. Il limite della CPU sarà del 90% per 5 minuti su qualcosa che potrebbe essere un utilizzo del 5-10%. Fondamentalmente, è rotto :-)
Kyle Brandt

I miei test dimostrano che l'esecuzione di un pool di app all'aggiornamento di 1 minuto con un limite della CPU di 1 (molto piccolo), quando viene raggiunto il limite, viene registrato un evento di sistema 5025 e il pool di applicazioni viene arrestato , interrompendo il processo di w3wp. Al termine del limite di tempo, il pool di applicazioni viene riavviato.
glasnt,

4

Dati i commenti nell'altra risposta, ho fatto i miei test, che replicherò qui.

Nel mio test, limitare un pool di applicazioni (v4.0 integrato) a un piccolo limite della CPU (0,01%) e un piccolo intervallo (1 minuto) con l' azione KillW3WP abilitata, andare oltre questo limite uccide il w3wp arrestando il pool di applicazioni .

Una volta raggiunto il limite dell'intervallo, il pool di applicazioni viene riavviato automaticamente .

La modifica dell'azione in Nessuna azione non modifica il processo w3wp.

In entrambi i casi, viene registrato un evento di sistema 5025.

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.