Warum verwendet IIS standardmäßig alle 1740 Minuten das Recycling des Anwendungspools?

22

Warum recycelt IIS standardmäßig den App-Pool nach einer bestimmten Zeit? Gibt es einen bestimmten Grund, außer dass die meisten Web-Apps den Speicher nicht umsichtig verwalten? Ist es sicher, wenn Sie den Speicher Ihrer Anwendung ordnungsgemäß verwalten, dies zu deaktivieren? Was sind einige mögliche Nachteile und Vorteile, wenn Sie das Recycling ausschalten oder fortsetzen?

aceinthehole
quelle
1
Sind Sie sicher, dass Sie nicht den Arbeitsprozess und nicht den App-Pool selbst recyceln möchten?
Ryathal

Antworten:

16

Ja, der Grund für die Standardeinstellung ist, dass die Web-App möglicherweise einen Speicherverlust aufweist. Der größte Nachteil beim häufigen Recycling von IIS-App-Pools besteht darin, dass das Lesen von web.config, das Laden von Assemblys und das erneute Kompilieren von asp.net-Seiten sowie (wenn Sie nicht daran glauben, diese vorab zu kompilieren) Code-Hintergründe verursacht werden. Dies ist ein ziemlich schwerer Prozess, der erst bei der nächsten Anforderung einer Seite nach der Wiederverwendung des App-Pools auftritt, wodurch diese bestimmte Anforderung erheblich verlangsamt wird. IIS7 verfügt jetzt über ein Modul namens Application Warm Up , das Sie herunterladen können , um dieses Problem zu lösen .

Ich persönlich bevorzuge es, speicherbasierte Maximalwerte in Verbindung mit dem Start der Protokollierung für die App zu verwenden, anstatt mein Recycling zu planen. Auf diese Weise kann ich davon ausgehen, dass meine App keinen Speicherverlust aufweist, und kann mich als falsch erweisen, wenn der App-Pool wiederverwendet wird.

Randolpho
quelle
+1, aber es sieht so aus, als hätten sie das Modul zum
Aufwärmen von
Was? Das ist komisch. Vielleicht finden sie eines Tages eine bessere Lösung. : /
Randolpho
3
und jetzt sieht es so aus, als hätten sie einen anderen veröffentlicht
aceinthehole
14

1740 Minuten sind 29 Stunden:

Zu Beginn der Entwicklung von IIS 6 - in dieser Version wurden Anwendungspools eingeführt - musste ein Standard für das reguläre Zeitintervall festgelegt werden, wenn Anwendungspools automatisch wiederverwendet werden.

Wade schlug 29 Stunden vor, aus dem einfachen Grund, dass es die kleinste Primzahl über 24 ist . Er wollte ein gestaffeltes und sich nicht wiederholendes Muster, das nicht häufiger als einmal pro Tag auftritt. In Wades Worten: „Sie bekommen kein Resonanzmuster“. Die Standardeinstellung war seitdem 1740 Minuten (29 Stunden)!

http://weblogs.asp.net/owscott/archive/2013/04/06/why-is-the-iis-default-app-pool-recycle-set-to-1740-minutes.aspx

Geoffrey Huntley
quelle
7

Feature ist ein Überbleibsel aus klassischen ASP-Tagen, in denen alles Speicher verloren hat und Sie es tun mussten. Die meisten Leute hatten einen geplanten Neustart auf dem Webserver über Nacht. IIS6 automatisierte dies mit dem Herunterfahren des App-Pools alle 1740 Minuten (oder wenn die App 20 Minuten lang inaktiv ist). IIS7 setzte die Tradition fort.

Ich habe damals von Microsoft den Rat erhalten, dass dies unnötig ist, es sei denn, Sie hatten eine Legacy-App mit einem bekannten Speicherverlust. Wenn Sie also nur verwalteten Code ausführen, ist dies in Ordnung.

Wyatt Barnett
quelle
3

Schalten Sie es aus und überwachen Sie die App-Pools. In den meisten komplexen Unternehmensanwendungen wird viel Legacy-Code verwendet, und ein Großteil dieses Codes ist irgendwie undicht. Daher ist es für die meisten Installationen keine schlechte Idee, den App-Pool gelegentlich neu zu starten.

Es gibt andere Optionen wie die Überwachung der Inaktivitätszeit, die möglicherweise eine bessere Lösung für Ihre Situation darstellen.

Das Hochfahren eines App-Pools kann einige Zeit in Anspruch nehmen und die Reaktion der Anwendung beeinträchtigen, sodass die Leistung gesteigert werden kann, wenn sie auf dem neuesten Stand gehalten wird.

ElGringoGrande
quelle
1

In der Tat dient dies lediglich der Bereinigung ausgelaufener Ressourcen, die (möglicherweise) vorhanden sind. Auch die 1740 Minuten sind nicht das einzige auslösende Ereignis. Dies geschieht auch nach einer bestimmten maximalen Anzahl von Anforderungen oder nach Überschreiten einer bestimmten Menge des Worker-Prozessspeichers. Es ist ziemlich gut in der MSDN-Bibliothek dokumentiert. Leider werden durch diese Richtlinie Dinge wie Sitzungsstatus und Statik wie Singletons aufgehoben. Ihre App muss robust genug sein, um Benutzer erneut zu authentifizieren und / oder Singletons nach Bedarf neu zu initialisieren, um die Benutzererfahrung nicht zu beeinträchtigen. Es hat uns gezwungen, authentifizierte Sitzungen in der Datenbank und nicht in der ASP.NET-Sitzung zu verwalten. Andernfalls wurden unsere Benutzer zu unserer Anmeldeseite zurückgeführt, wenn der Server aufgrund eines dieser Auslöser wiederverwendet wurde.

Larry Hector
quelle