2010-01-27 3 views
52

Wie empfiehlt sich die Entscheidung, wie viele Arbeitsprozesse für eine ASP.NET-Webanwendung zulässig sind?ASP.NET Web Garden - Wie viele Arbeitsprozesse benötige ich?

Auf einem Server, den ich verwalte, erstellt ein neuer AppPool standardmäßig 10 (maximal) Worker-Prozesse. Andere Leute schlagen vor, dass die normale Einstellung eins ist.

Welches Problem lösen mehrere Worker-Prozesse und nach welchen Verfahren entscheiden Sie, wie viele?

+1

Ich war nicht sicher, ob dies hier oder auf ServerFault angemessener wäre, lassen Sie mich wissen, wenn ich die falsche Wahl getroffen habe und ich werde es verschieben. –

+4

Gehen Sie weiter und fragen Sie an beiden Orten. Ich denke deine Frage ist hier relevant. Die Besonderheiten der ASP.Net-Bereitstellung fallen häufig in den Bereich des Entwicklers, insbesondere im Hinblick auf die App-Optimierung. – DOK

+6

Ich stimme DOK zu. Beide Orte sind angemessen. Entwickler sind oft diejenigen, die den Netzwerk-Jungs sagen müssen, wie sie den Server konfigurieren. Aus diesem Grund müssen sie diese Informationen haben. – NotMe

Antwort

47

Arbeitsprozesse sind eine Möglichkeit, die Ausführung Ihrer Website über mehrere Exe zu segmentieren. Sie tun dies aus einer Reihe von Gründen, einer, wenn einer der Arbeiter von Laufzeitproblemen geplagt wird, nimmt er die anderen nicht herunter. Wenn beispielsweise eine HTML-Anfrage eintrifft, die dazu führt, dass der Prozess in nichts abläuft, werden nur die anderen Anfragen, die von diesem einen Worker-Prozessor bearbeitet werden, gelöscht. Ein anderes Beispiel ist, dass eine Anforderung eine Blockierung der anderen Threads verursachen könnte, die von demselben Worker behandelt werden.

Soweit wie viele Sie benötigen, führen Sie einige Belastungstests durch. Hit die App hart und sehen, was passiert mit nur einem. Dann fügen Sie etwas mehr hinzu und drücken Sie es erneut. Irgendwann werden Sie einen Punkt erreichen, an dem das Netzwerk, die Festplatte, die CPU und der Arbeitsspeicher der Maschine wirklich gesättigt sind. Dann weißt du, dass du das richtige Gleichgewicht hast.

Im Übrigen können Sie die Anzahl der pro Worker-Prozess verwendeten Threads über die Datei machine.config steuern. Ich glaube, der Schlüssel ist maxWorkerThreads.

Vorsicht, wenn Sie eine Sitzung verwenden, wird der Sitzungsstatus nicht zwischen Arbeitsprozessen geteilt. Ich empfehle generell, die Sitzung zu vermeiden, aber es ist etwas zu beachten.

Für alle Absichten und Zwecke können Sie jeden Worker-Prozess als eigenen separaten Webserver betrachten. Außer dass sie auf derselben Box laufen.

+1

In der Tat war es ein Problem mit Sitzungsstatus, der diese Frage ausgelöst hat (siehe http://StackOverflow.com/Questions/2147578/asp-net-Session-State-and -Mehrfacharbeiter-Prozesse). Vielen Dank für eine hilfreiche Antwort (+1) –

+2

Die Standardeinstellung ist normalerweise eins. Ihr Server mit dem Standardwert 10 muss geändert worden sein, um die Standardeinstellungen zu ändern. – NotMe

+1

@ChrisLively, Sitzungsstatus wird zwischen den Arbeitsprozessen geteilt, infact Sitzungsstatus wird auch zwischen mehreren Websites mit demselben Cookie-Namen geteilt. –

4

Memory Leaks

Der andere große Vorteil ist, Speicherlecks Handhabung. Manchmal versuchen Sie, Ihren Code zu optimieren, aber es gibt Speicherverluste im Framework selbst und in anderen Bibliotheken von Drittanbietern. Uns ist aufgefallen, dass unsere Anwendung schließlich sehr viel Speicher erreicht und keine Speicherausnahmen mehr gibt.

Also mussten wir eine maximale virtuelle Speichergrenze auf Worker-Prozess auf 1GB mögen und erlauben mehrere Prozesse zu laufen. Sie können das maximale virtuelle Limit auch für einzelne Worker-Prozesse festlegen, dies führt jedoch zu einer Verlangsamung der Spitzenzeiten. Wenn der Worker-Prozess wiederverwendet wird, sind alle Anforderungen langsam, bis der Worker-Prozess eine gute Geschwindigkeit erreicht. Da unsere Anwendung über internes Caching (Entity Framework Query Cache, einige Objektpools) verfügt, verlangsamt sich jedes dieser Dinge beim Starten der Anwendung. Hier schmerzt der einzelne Arbeitsprozess am meisten.

Wenn mehrere Worker-Prozesse vorhanden sind, ist nur einer der Prozesse im Recycle-Modus langsam, aber andere behalten ihre Geschwindigkeit bei.

1

Ein weiterer Fall, in dem viele Worker-Prozesse sinnvoll sind, ist, wenn Ihre Anwendung Sperren enthält, die ihre Parallelisierung verhindern. GDI + basierte Bildverarbeitung ist eines der Beispiele.

Ich fand es, wenn ich versuchte, eine Lösung für my problem zu finden.

Verwandte Themen