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?
22
Antworten:
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.
quelle
1740 Minuten sind 29 Stunden:
http://weblogs.asp.net/owscott/archive/2013/04/06/why-is-the-iis-default-app-pool-recycle-set-to-1740-minutes.aspx
quelle
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.
quelle
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.
quelle
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.
quelle