Die Antwort von womble ist großartig, wenn auch etwas schwer zu verstehen und für Unerfahrene zu beantragen. Ich möchte einige empirische Zahlen und den Vergleich von "einfachen Inhalten" und "E-Commerce" -Anwendungen nennen.
Es gibt nicht viel Material, um verschiedene Anwendungsfälle in Bezug auf die entsprechende Konfiguration von mod_wsgi festzulegen, daher hoffe ich, dass es in Ordnung ist, hier eine kleine Prosa zu verwenden.
A) CMS Sites & Microsites
Wir betreiben mehrere Kundenwebsites, von denen die meisten Content-Websites oder Micro-Websites sind, auf denen Django CMS, einige benutzerdefinierte Formulare und manchmal Sellerie für geplante Hintergrundaufgaben gehostet werden. Diese Sites sind nicht ressourcenhungrig. Einige von ihnen laufen problemlos parallel auf einem einzigen 4-Core Intel Xeon mit 32 GB RAM. Hier ist die Konfiguration, die wir für jede dieser Sites verwenden:
WSGIDaemonProcess example.com user=www-data processes=2 maximum-requests=100
Ich spreche von ungefähr 40 Sites auf einem einzelnen Server, von denen die meisten mit ihrer Staging-Site im Standby-Modus ausgeführt werden. Mit 2 Prozessen (standardmäßig mit jeweils 15 Threads) sind die Sites gut ausgelastet, auch wenn ihre Fähigkeit zur Zuweisung von Serverressourcen eingeschränkt ist. Warum dieses Setup ausreicht, lässt sich mit der einfachen Art der (CMS-) Anwendung begründen: Es wird nie erwartet, dass eine Anforderung länger als ein paar Millisekunden dauert. Apache bleibt immer entspannt, ebenso wie die CPU-Last.
B) E-Commerce-Sites
Komplexere Sites, die wir anbieten, zeichnen sich durch immer noch rechengünstige lokale Operationen aus, aber externe Abhängigkeiten (z. B. Webdienste, die Buchungsdaten bereitstellen), die in Bezug auf die Transaktionszeit teuer sind. Vorgänge mit externen Anforderungen belegen Threads viel länger, sodass Sie mehr Threads benötigen, um die gleiche Anzahl von Benutzern zu bedienen (im Vergleich zu einer einfachen CMS-Site von oben). Noch schlimmer ist, dass Threads gelegentlich blockiert werden, wenn ein externer Dienst eine Anfrage nicht sofort beantworten kann, manchmal für ein paar Sekunden. Dies kann zu dem unangenehmen Nebeneffekt führen, dass Threads, die Anforderungen an dieselbe Servicewarteschlange senden, so lange in Betrieb bleiben, bis alle verfügbaren mod_wsgi-Threads aufgebraucht sind und das Warten blockiert wird.
In diesen Szenarien haben wir versucht, 6
Prozesse zu verwenden , ohne große Unterschiede zu bemerken, und 12
dabei eine unvergleichliche Steigerung der Leistung und der Betriebsstabilität festgestellt:
WSGIDaemonProcess example.com user=www-data processes=12 maximum-requests=100
Einige einfache Auslastungstests mit 150 und 250 parallelen Benutzern können von der Site problemlos durchgeführt werden, wobei die Site gut reagiert (während 2
die Site bei Prozessen nicht mehr für die gleichzeitige Verpflegung von 50 Benutzern geeignet ist). Der Intel Xeon mit 2 CPUs und 6 Kernen und 32 GB RAM ist unter dieser Last mit deutlich weniger als 25% der CPU ausgelastet. Auch die RAM-Auslastung bleibt mit weniger als 25% nahezu konstant. Beachten Sie, dass wir hier einen dedizierten Computer nur für einen einzelnen Standort verwenden, damit wir keine Ressourcen stehlen, die andere Standorte möglicherweise benötigen.
Fazit
Die Verwendung einer höheren Anzahl von Prozessen ist ein Kompromiss zwischen dem Ermöglichen, dass Apache die verfügbaren Systemressourcen nutzt oder nicht. Wenn Sie ein stabiles Serversystem (nicht Website!) Unter "Angriffsbedingungen" betreiben möchten, halten Sie die Anzahl niedrig. Wenn Sie möchten, dass Apache Sie bei Bedarf bei der Verwendung von Systemressourcen (CPU, RAM) unterstützt, wählen Sie eine höhere Zahl. Wie hoch Sie gehen können, hängt in etwa von der oben angegebenen akzeptierten Antwort ab und wird letztendlich durch die verfügbare CPU-Leistung und den verfügbaren Arbeitsspeicher eingeschränkt.
(PS: Ich behalte den Abschnitt "ConfigurationDirectives" des Modwsgi-Projekt-Wikis unter meinem Kopfkissen, damit ich Apache-ähnliche Hintergrundinformationen lesen kann. Vergewissern Sie sich auch, dass Sie die offenen Verbindungen Ihres Apache-Servers verstehen und überwachen .)