CPU-Limits für Anwendungspools in IIS 7.5

8

Ich sehe, dass ich in iis 7.5 ein CPU% Auslastungslimit für eine bestimmte Zeitspanne für einen Anwendungspool festlegen kann . Ich kann es auch den Worker-Prozess beenden lassen, wenn diese Grenze verletzt wird. Wenn Sie dies anweisen, wird der Worker-Prozess nach dem Abbruch automatisch neu gestartet oder ist ein manueller Eingriff erforderlich?

Drüben bei Stack Overflow wird erwähnt, dass es nach Ablauf des Intervalls neu gestartet werden kann ...

Kyle Brandt
quelle

Antworten:

4

Dies scheint einer der Fälle zu sein, in denen Simulation (oder Quellcode-Zugriff ...> Seufzen <) wahrscheinlich der einzige Weg ist, um das Verhalten mit einem gewissen Maß an Sicherheit zu erkennen.

In der Dokumentation zum Ereignisprotokolleintrag für das CPU-Kontingentrecycling wird wie folgt über das Recycling gesprochen:

Standardmäßig überlappt sich das Recycling des Anwendungspools. Dies bedeutet, dass der zu beendende Arbeitsprozess bis zum Start eines neuen Arbeitsprozesses ausgeführt wird. Nachdem ein neuer Arbeitsprozess gestartet wurde, werden neue Anforderungen an ihn übergeben. Der alte Arbeitsprozess wird heruntergefahren, nachdem die Verarbeitung der vorhandenen Anforderungen abgeschlossen ist, oder nach einem konfigurierten Zeitlimit, je nachdem, was zuerst eintritt. Diese Art des Recyclings gewährleistet einen unterbrechungsfreien Service für die Kunden. Wenn eine Anwendung im Anwendungspool jedoch nicht mehr als eine Instanz gleichzeitig ausführen kann, kann die überlappende Rotation deaktiviert werden.

Es scheint mir, dass das Beenden eines Arbeitsprozesses aufgrund eines übermäßigen CPU-Verbrauchs per Definition bedeuten würde, dass ausstehende Anforderungen nicht abgeschlossen werden dürfen (da sie das CPU-Kontingent erschöpfen).

Um zu Ihrem Hauptanliegen zu sprechen: Ich sehe nichts, was mich glauben lässt, dass ein neuer Arbeitsprozess nicht automatisch gestartet wird. Die Aussage in Ihrem Stapelüberlauf-Link lässt mich fragen, ob der von IIS verwendete Algorithmus das Recycling tatsächlich mit der Auflösung des Timers verknüpft, der zur Messung der CPU-Kontingentauslastung verwendet wird. Der beste Weg, dies festzustellen, besteht darin, eine CPU-verschwenderische serverseitige Komponente zu schreiben, sie in einer Testumgebung bereitzustellen und zu sehen, wie sich ihr Recyclingverhalten verhält. Eine einfache Komponente, die einige Sekunden lang in einer engen Schleife sitzt und dann eine bekannte Zeichenfolge zurückgibt, kombiniert mit einem Client, der ein Testkabel mit so etwas wie einem Pool paralleler "wget" -Prozesse ausführt, könnte ausreichen.

Evan Anderson
quelle
Du siehst aus, als müsste ich es einfach testen. Ich habe bereits ein einmaliges Testskript in Python geschrieben, um diese Art von Dingen zu testen, die sich als nützlich erwiesen haben. Ich musste eine gehackte Version von Socket und http-Bibliothek verwenden, damit ich mich an verschiedene Quell-IPs binden konnte :-)
Kyle Brandt
Eine Anfrage könnte jedoch ausreichen ... Web-App, die pi berechnet ...
Kyle Brandt
@Kyle: Ich werde aber keine unendliche Anfrage machen. Ich würde etwas tun, das, sobald Sie ein paar Anfragen "im Flug" erhalten, die CPU des Servers überlastet, aber schließlich ein Ergebnis zurückgibt. Auf diese Weise kann Ihr Prüfstand über Erfolg / Misserfolg aller von ihm gestellten Anforderungen berichten. Andernfalls haben Sie keine Ahnung, ob das Recyclingverhalten tatsächlich zu einem Serviceausfall für Kunden führt oder nicht.
Evan Anderson
Oh, ich verstehe, was Sie sagen ... war nicht wirklich das Hauptziel dieses Tests ... aber gute Informationen zu haben. Ich möchte nur sehen, wann es getötet wird, kommt es zurück oder nicht. Das CPU-Limit liegt bei 90% für 5 Minuten bei einer Auslastung von 5-10%. Grundsätzlich ist es kaputt :-)
Kyle Brandt
Meine eigenen Tests haben gezeigt, dass das Ausführen eines App-Pools bei einer Aktualisierung von 1 Minute mit einem CPU-Limit von 1 (sehr klein), wenn das Limit erreicht wird, ein Systemereignis 5025 protokolliert und der Anwendungspool gestoppt wird , wodurch der w3wp-Prozess beendet wird. Nach Ablauf des Zeitlimits wird der Anwendungspool neu gestartet.
Glasnt
4

Angesichts der Kommentare in der anderen Antwort habe ich meine eigenen Tests durchgeführt, die ich hier wiederholen werde.

Wenn ich in meinen Tests einen Anwendungspool (v4.0 Integrated) auf ein kleines CPU-Limit (0,01%) und ein kleines Intervall (1 Minute) mit aktivierter KillW3WP- Aktion beschränke, wird das w3wp durch Stoppen des Anwendungspools beendet, wenn dieses Limit überschritten wird .

Nach Erreichen des Intervalllimits wird der Anwendungspool automatisch neu gestartet .

Wenn Sie die Aktion in " Keine Aktion" ändern, wird der w3wp-Prozess nicht geändert.

In beiden Fällen wird ein Systemereignis 5025 protokolliert.

glasnt
quelle