Bewährte Methoden für den IIS 7.x-Anwendungspool

24

Wir sind dabei, eine Reihe von Sites auf einigen neuen Servern bereitzustellen. Ich habe folgende Fragen zu Anwendungspools:

  1. Es scheint ratsam, einen Anwendungspool pro Website zu haben. Gibt es irgendwelche Einschränkungen bei diesem Ansatz? Verbraucht ein Anwendungspool die gesamte CPU, den Arbeitsspeicher usw.?

  2. Wann sollten Sie mehrere Arbeitsprozesse in einem Anwendungspool zulassen? Wann solltest du nicht

  3. Kann die Beschränkung des privaten Speichers verwendet werden, um zu verhindern, dass ein Anwendungspool einen anderen beeinträchtigt? Wird eine zu niedrige Einstellung dazu führen, dass gültige Anforderungen den Anwendungspool wiederverwenden, ohne eine gültige Antwort zu erhalten?

  4. Was ist der Unterschied zwischen privaten und virtuellen Speicherbeschränkungen?

  5. Gibt es zwingende Gründe, einen Anwendungspool pro Site NICHT auszuführen?

Eric Burcham
quelle
Erste Frage an Sie: Handelt es sich bei diesen Websites (dh .htm / .js) um Webanwendungen (dh .aspx / .php)?
Codierung Gorilla
Meistens .Net 3.5-Anwendungen. Eine ist eine PHP-Anwendung von Drittanbietern.
Eric Burcham
1
Dies ist eine Art breite Palette von Themen - Das Thema (und die Antworten von @ CodingGorilla) sind interessant, aber es ist möglicherweise nicht die beste
Lösung für SFs Frage

Antworten:

20

1) Es scheint ratsam, einen Anwendungspool pro Website zu haben. Gibt es irgendwelche Einschränkungen bei diesem Ansatz? Kann eine Anwendung beispielsweise die gesamte CPU, den Arbeitsspeicher usw. auslasten?

Dies ist ein ziemlich guter Ansatz. Es gibt keine guten Gründe, warum ich mir vorstellen kann, dass sich verschiedene "Sites" (Anwendungen) den gleichen Pool teilen. Es sei denn, sie müssen eine einzelne Ressource teilen. Eine Anwendung könnte theoretisch viel CPU oder Speicher beanspruchen, aber Änderungen an der Art und Weise, wie die Anwendungen gepoolt werden, wirken sich nicht wirklich so stark aus.

2) Wann sollten Sie mehrere Worker-Prozesse in einem Anwendungspool zulassen? Wann solltest du nicht

Dies lässt man am besten mit den Standardeinstellungen alleine. Wenn Sie nicht genau wissen, was Sie tun, kann sich dies negativ auf Ihre Website / Anwendung auswirken.

3) Kann ein privates Speicherlimit verwendet werden, um zu verhindern, dass ein Anwendungspool einen anderen beeinträchtigt? Wird eine zu niedrige Einstellung dazu führen, dass gültige Anforderungen den Anwendungspool wiederverwenden, ohne eine gültige Antwort zu erhalten?

a) Theoretisch

b) Ja, eine niedrigere Einstellung kann negative Auswirkungen haben. Lassen Sie diese einfach in Ruhe, es sei denn, Sie haben spezielle Bedürfnisse und wissen, was Sie tun.

4) Was ist der Unterschied zwischen privaten und virtuellen Speichergrenzen?

Das ist sehr kompliziert. Hier ist ein kurzer Beitrag, den ich gefunden habe und der helfen könnte: http://cybernetnews.com/cybernotes-windows-memory-usage-explained/

5) Gibt es zwingende Gründe, einen Anwendungspool pro Site NICHT auszuführen?

Wiederum kann ich nur daran denken, dass Sie, wenn es eine Art "gemeinsam genutzte Ressource" gibt, die von mehreren Anwendungen benötigt wird, diese im selben Prozess ausführen möchten.

Für Allzweckanwendungen und Websites ist IIS mit seinen Standardwerten ziemlich gut eingerichtet.

****AKTUALISIEREN****

In Bezug auf Ihre Anfrage nach zusätzlichen Informationen zu Nummer 2 sollten Sie dies nicht tun, es sei denn, Sie müssen dies ausdrücklich tun. Selbst bei Serveraktionen, die viel Zeit in Anspruch nehmen, werden Anforderungen über mehrere Threads bedient, und Sie möchten "Async Requests" (Asynchrone Anforderungen) verwenden, um lang laufende Aufgaben zu erledigen (wodurch ein Threadpool-Thread für die Bearbeitung anderer Anforderungen freigegeben wird). Realistisch kann ich mir keinen guten Grund vorstellen, mehrere Prozesse für einen einzelnen Pool zuzulassen.

Sobald Sie anfangen, über mehrere Prozesse zu sprechen, werden Sie möglicherweise auf Folgendes gestoßen: Den Sitzungsstatus zu verlieren, da eine Sitzung in Prozess 1 noch aktiv ist, die Anforderung jedoch von Prozess 2 verarbeitet wird Machen Sie eine prozessübergreifende Kommunikation, was sehr schmerzhaft ist.

Egal, was Sie in Bezug auf einen Grund für mehrere Prozesse mitbringen, ich würde wetten, dass es eine bessere Möglichkeit gibt, damit umzugehen (anstatt einen anderen Prozess auszulösen).

Codierung Gorilla
quelle
Ich schätze die nachdenkliche Antwort und habe sie angenommen. Wenn Sie genauere Informationen zu Nummer 2 haben, würde ich mich freuen. "Am besten in Ruhe lassen" ist sicherlich ein guter Rat, aber es wäre auch gut zu wissen, wann mehrere Arbeitsprozesse angewendet werden sollten. Ich gehe davon aus, dass dies relevanter ist, wenn Sie Serveraktionen ausführen, bei denen die Rückgabe einer Antwort sehr lange dauert, z. Ich gehe auch davon aus, dass alle normalen Thread-Nebenläufigkeiten zutreffen.
Eric Burcham
Nur zum Hinzufügen: Wenn Sie erwarten, dass Ihre Apps schlecht zusammenspielen, wird im Installationsdialog für IIS darauf hingewiesen, dass der Windows-Systemressourcen-Manager installiert und verwendet werden kann, um die CPU- und Speichernutzung durch App-Pools einzuschränken.
TristanK
@TristanK, danke für den Tipp. Das war sehr hilfreich.
Eric Burcham
@Coding Gorilla - Nochmals vielen Dank für die Einsicht. Ich beschloss, mich ernsthaft mit dem Thema "Warum einen Webgarten nutzen?" Zu befassen und fand mehrere Antworten. Alle von Ihnen genannten Einschränkungen gelten, insbesondere für den asynchronen Zugriff auf gemeinsam genutzte Ressourcen wie verschiedene Caches und Benutzersitzungen. Mit der Webgarten-Funktion können Sie Anforderungen für den Lastenausgleich im Wesentlichen nur auf einem einzelnen Server mit mehr als einem Kern ausführen. Sie müssen sich also mit allen Vorbehalten befassen, die Sie normalerweise in einem Lastausgleichsszenario bewältigen, mit Ausnahme der Weiterleitung der Anforderungen.
Eric Burcham
@Coding Gorilla - Fortsetzung ... Der beste "Grund" für die Verwendung der Funktion für mehrere Worker-Prozesse ist die Leistungssteigerung. Schauen Sie sich diesen Link an: iis-aid.com/articles/performance_testing/… . Natürlich sollten Sie besser wissen, was Sie mit all den asynchronen Aspekten der Programmierung tun, die wir bei Websites oft vernachlässigen, da die meisten von ihnen (zumindest zu Beginn) einen einzelnen Worker-Thread ausführen. Die kurze Antwort auf meine Frage lautet also: Probieren Sie es aus, wenn Sie Leistungsprobleme haben.
Eric Burcham
4

Ich konfiguriere immer einen dedizierten Anwendungspool für eine Website. In kostengünstigen Szenarien für das Hosting von Websites ist eine große Anzahl von Websites pro Anwendungspool sinnvoll.

Die Speichergrenzen sind eigentlich nur primitive Sicherheitsschwellen, um zu verhindern, dass ein Standort alle Systemressourcen verbraucht. Beachten Sie, dass dies unter Windows 2008 R2 x64 ein größeres Problem darstellt als unter IIS 6.0 x86, da x86-Anwendungen eine natürliche Speicherkapazität von 2 GB aufwiesen. Unter IIS 7.5 ist es für eine Anwendung mit einem Speicherverlust viel einfacher, große Mengen an Speicher zu verbrauchen.

Ich bin auch kein großer Fan von Recycling-Anwendungspools. Wenn ich einen Anwendungspool habe und die einzige Anwendung bin, die ausgeführt wird, und wenn an unserem Code nichts falsch ist, besteht wahrscheinlich keine Notwendigkeit, den Anwendungspool erneut zu recyceln. Und wenn ein Fehler in der Anwendung vorliegt, besteht die letztendlich geeignete Maßnahme darin, den Code zu reparieren.

Greg Askew
quelle
Vielen Dank, dass Sie auf die 32-Bit-Speicherkapazität hingewiesen haben. Ich weiß nicht, wie ich diese Dinge vergesse. Ich denke auch, dass der richtige Ansatz, wenn Sie eine Anwendung haben, die defekt genug ist, um einen App-Pool zum Absturz zu bringen, darin besteht, sie zu reparieren, vorausgesetzt, Sie haben Zugriff auf den Code. Ich schätze den Rat!
Eric Burcham
Wir haben einige eigene Tests durchgeführt. Das Ausführen eines Anwendungspools hat anscheinend einen Overhead von ca. 64 KB pro Anwendungspool, wenn die Anwendungen alle im selben Anwendungspool ausgeführt werden. Das ist über einen Beispielzeitraum von 12 Stunden, in dem der Leistungsmonitor zum Überwachen des Speicherverbrauchs verwendet wird. Dies war auf einem 64-Bit-Server. Ich denke, wenn sich dieser einfache Test als richtig herausstellt, sind die Ressourcenkosten eines App-Pools pro Anwendung auf moderner Hardware im Grunde vernachlässigbar.
Eric Burcham