-
Jeder Prozess besitzt eine feste Anzahl von Threads. Um die Last
- zu bewältigen, passt sich der Server an, indem er die
- Anzahl der Prozesse erhöht oder verringert.
-
-
Ein einzelner Steuerprozess ist für den Start der
- Kindprozesse verantwortlich. Jeder Kindprozess erstellt eine
- feste Anzahl von Threads, wie durch die ThreadsPerChild
-Direktive
- angegeben. Der einzelne Thread lauscht dann auf Verbindungen und
- bedient sie, sobald sie eintreffen.
+
Ein einzelner Steuerprozess (der Elternprozess) ist für den
+ Start der Kindprozesse verantwortlich. Jeder Kindprozess erstellt eine
+ feste Anzahl von Server-Threads, wie durch die ThreadsPerChild
-Direktive
+ angegeben, sowie einen "Listener-Thread", der auf Verbindungen wartet und
+ diese an einen Server-Thread zur Bearbeitung weiterreicht, sobald sie
+ eintreffen.
Der Apache versucht immer, einen Vorrat von freien oder
unbeschäftigten Threads zu verwalten, die zur Bedienung
@@ -105,21 +103,44 @@
maximale Anzahl Clients, die gleichzeitig bedient werden kann (d.h.
die maximale Gesamtzahl der Threads in allen Prozessen), wird mit der
Direktive MaxClients
- festgelegt, während die maximale Anzahl Prozesse, die gestartet
- werden kann, von der Direktive ServerLimit
bestimmt wird. ServerLimit
multipliziert mit ThreadsPerChild
muss größer
- oder gleich MaxClients
- sein.
+ festgelegt. Die maximale Anzahl der aktiven Kindprozesse ergibt sich aus
+
MaxClients
dividiert durch
+
ThreadsPerChild
.
+
+
Zwei Direktiven legen harte Limits für die Anzahl der aktiven
+ Kindprozesse fest und können nur geändert werden, indem der Server
+ komplett gestoppt und dann wieder neu gestartet wird. ServerLimit
stellt die obere Grenze für
+ die Anzahl der aktiven Kindprozesse dar und muss größer oder
+ gleich dem Quotienten aus MaxClients
und ThreadsPerChild
sein. ThreadLimit
ist die obere Grenze für
+ die Anzahl der Server-Threads und muss größer oder gleich
+ ThreadsPerChild
sein. Sofern für
+ diese Direktiven keine Voreinstellungen verwendet werden, sollten sie vor
+ allen anderen worker
-Direktiven platziert werden.
+
+
Neben den normalen aktiven Kindprozessen gibt es möglicherweise noch
+ zusätzliche Kindprozesse, welche gerade beendet werden, wo allerdings
+ zumindest noch ein Server-Thread eine existierende Verbindung bearbeitet.
+ Obwohl die tatsächlich zu erwartende Anzahl deutlich kleiner ist,
+ können bis zu MaxClients
+ solcher Prozesse auftreten. Dieses Verhalten können Sie vermeiden,
+ indem Sie die Terminierung einzelner Kindprozesse wie folgt abschalten:
+
+
Eine typische Konfiguration der Prozess-Thread-Steuerung für
das MPM worker
könnte wie folgt aussehen:
+ ServerLimit 16
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
- ThreadsPerChild 25
- ServerLimit 16
+ ThreadsPerChild 25
Während der Elternprozess unter Unix normalerweise als
--
2.50.1