Frage Best Practices für den IIS 7.x-Anwendungspool


Wir werden eine Reihe von Websites auf einigen neuen Servern bereitstellen. Ich habe folgende Fragen zu Anwendungspools:

  1. Es scheint ratsam, einen Anwendungspool pro Website zu haben. Gibt es Vorbehalte gegenüber diesem Ansatz? Wird ein Anwendungspool die gesamte CPU, den Speicher usw. verschlingen?

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

  3. Kann das private Speicherlimit verwendet werden, um zu verhindern, dass ein Anwendungspool einen anderen beeinträchtigt? Wird die Einstellung zu niedrig sein, um gültige Anforderungen zum Recyceln des Anwendungspools zu generieren, ohne eine gültige Antwort zu erhalten?

  4. Was ist der Unterschied zwischen privaten und virtuellen Speicherbegrenzungen?

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


24
2017-10-14 18:35


Ursprung


Erste Frage an Sie: Sind diese Websites (zB: .htm / .js), oder Web-Anwendungen (zB .aspx / .php)? - Coding Gorilla
Meistens .Net 3.5 Anwendungen. Eine ist eine Drittanbieter-PHP-Anwendung. - Eric Burcham
Das ist eine breite Palette von Themen - Das Thema (und @ CodingGorilla Antworten) sind interessant, aber es könnte nicht die beste Passform für SF Q-and-A-Stil sein - voretaq7


Antworten:


1) Es scheint ratsam, einen Anwendungspool pro Website zu haben. Gibt es Vorbehalte gegenüber diesem Ansatz? Kann ein Anwendungspool beispielsweise die gesamte CPU, den Speicher usw. verschlingen?

Das ist ein ziemlich guter Ansatz; Es gibt keine guten Gründe dafür, dass verschiedene "Sites" (Anwendungen) denselben Pool haben. Es sei denn, sie müssen eine einzelne Ressource teilen. Eine Anwendung könnte theoretisch viel CPU oder Speicher beanspruchen, aber die Art und Weise, in der die Anwendungen gepoolt werden, wird sich nicht so sehr auswirken.

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

Dies ist am besten in Ruhe, mit den Standardeinstellungen. Wenn Sie nicht wirklich wissen, was Sie tun, kann sich dies negativ auf Ihre Website / Anwendung auswirken.

3) Kann das private Speicherlimit verwendet werden, um zu verhindern, dass ein Anwendungspool einen anderen stört? Wird die Einstellung zu niedrig sein, um gültige Anforderungen zum Recyceln des Anwendungspools zu generieren, ohne eine gültige Antwort zu erhalten?

a) Theoretisch

b) Wenn Sie die Einstellung auf "Niedrig" setzen, kann dies negative Auswirkungen haben. Auch wenn Sie bestimmte Bedürfnisse haben und wissen, was Sie tun, lassen Sie diese einfach in Ruhe.

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

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

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

Wiederum kann ich nur daran denken, ob es eine Art "geteilte Ressource" gibt, die die verschiedenen Anwendungen benötigen, und dann möchten Sie sie im selben Prozess ausführen.

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

****AKTUALISIEREN****

In Bezug auf Ihre Anfrage für zusätzliche Informationen zu # 2 sollten Sie dies nicht tun, es sei denn, Sie haben eine spezielle Notwendigkeit dazu. Selbst bei Serveraktionen, die lange dauern, werden Anforderungen mit mehreren Threads bedient, und Sie möchten "Async-Anforderungen" verwenden, um lange laufende Aufgaben zu bearbeiten (wodurch ein Threadpool-Thread zur Bearbeitung anderer Anfragen freigegeben wird). Realistischerweise kann ich mir keinen guten Grund vorstellen, mehrere Prozesse für einen einzelnen Pool zuzulassen.

Sobald Sie anfangen, mehrere Prozesse zu sprechen, stoßen Sie möglicherweise auf Dinge wie: Verlust des Sitzungsstatus, weil eine Sitzung in Prozess 1 lebt, aber die Anforderung wird von Prozess 2 gehandhabt. Oder noch schlimmer, Sie müssen herausfinden, wie eine Kommunikation zwischen den Prozessen machen, was ein echter Schmerz ist.

Egal, was Sie in Bezug auf einen Grund für mehrere Prozesse kommen, würde ich wetten, dass es einen besseren Weg gibt, damit umzugehen (anstatt einen anderen Prozess zu feuern).


20
2017-10-14 19:07



Ich schätze die nachdenkliche Antwort und akzeptiere sie. Wenn Sie mehr spezifische Informationen zu # 2 haben, würde ich es begrüßen. "Am besten alleine gelassen" ist sicherlich ein weiser Ratschlag, aber es wäre auch gut zu wissen, wann mehrere Arbeitsprozesse verwendet werden sollten. Ich nehme an, das ist relevanter, wenn Sie einige Serveraktionen haben, die eine lange Zeit benötigen, um eine Antwort zurückzugeben, wie einen großen Bericht, einen Webdienst, der große Posts akzeptiert, und dergleichen. Ich nehme auch an, dass alle normalen Thread-Nebenläufigkeits-Sachen zutreffen? - Eric Burcham
Nur um hinzuzufügen: Wenn Sie erwarten, dass Ihre Apps schlecht zusammenspielen, wird im Installationsdialog für IIS angemerkt, dass Windows System Resource Manager installiert werden kann, um die CPU- und Speicherbenutzung durch App-Pools zu beschrä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, ernsthaft nach "warum benutze einen Webgarten" zu forschen und kam zu mehreren 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 Web-Garden-Funktion können Sie Balance-Anforderungen auf einem einzelnen Server mit mehr als nur Core laden. Sie müssen also mit allen Einschränkungen umgehen, mit denen Sie normalerweise in einem Lastausgleichs-Szenario umgehen, außer dass Sie die Anforderungen weiterleiten. - Eric Burcham
@Coding Gorilla - Fortsetzung ... Der beste "Grund", den ich gefunden habe, um das Multiple-Worker-Prozess-Feature zu nutzen, ist die Leistungssteigerung. Überprüfen Sie diesen Link: iis-aid.com/articles/performance_testing/.... Natürlich müssen 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 einzigen Worker-Thread ausführen. Die kurze Antwort auf meine Frage lautet also: Versuchen Sie es, wenn Sie Leistungsprobleme haben. - Eric Burcham


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

Die Speichergrenzen sind wirklich nur primitive Sicherheitsschwellen, um zu verhindern, dass eine Site alle Systemressourcen verbraucht. Beachten Sie, dass dies bei Windows 2008 R2 x64 ein größeres Problem darstellt als bei IIS 6.0 x86, da x86-Anwendungen eine natürliche Speicherobergrenze von 2 GB aufweisen. In IIS 7.5 ist es viel einfacher, wenn eine Anwendung mit einem Speicherleck große Speichermengen verbraucht.

Ich bin auch kein großer Fan von Recycling-Anwendungspools. Wenn ich einen Anwendungspool habe und ich die einzige Anwendung bin, die ausgeführt wird, ist es wahrscheinlich nicht nötig, den App-Pool zu recyceln, wenn unser Code nicht in Ordnung ist. Und wenn es einen Fehler in der Anwendung gibt, wäre die ultimative geeignete Maßnahme, den Code zu beheben.


4
2017-10-14 20:29



Danke, 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, das Problem zu beheben, 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 scheint einen Overhead von ca. 64 KB pro App-Pool zu haben, oberhalb dessen die Anwendungen alle im selben Anwendungspool ausgeführt werden. Das ist über einen Stichprobenzeitraum von 12 Stunden mit dem Leistungsmonitor zur Überwachung des Speicherverbrauchs. 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