Apache MaxClients mpm_prefork_module optimal einstellen

Der Apache-Webserver hat in seiner Config-Datei eine Möglichkeit, die maximale Benutzerzahl sowie die gleichzeitig laufenden Prozesse/Threads zu beschränken. Hintergrund dieser Serverlimitierung ist, dass der Server und nicht unter Last zusammenbricht, denn die Anzahl der möglichen Threads und gleichzeitige Userzugriffe hängen stark vom Speicher im Server und dessen CPU ab.

Wenn der Server schon bei wenigen Usern „streikt“, gibt ein Blick in das Apache error.log Auskunft. Ist darin ein Eintrag wie folgt ersichtlich, ist dies ein klarer Hinweis auf die Serverlimitierung innerhalb der apache2.conf-Datei:

[error] server reached MaxClients setting, consider raising the MaxClients setting

Es ist dann höchste Zeit, sich mit der Datei „/etc/apache/apache2.conf” (oder „/etc/apache2/apache2.conf”) auseinanderzusetzen. Wir finden im Abschnitt „mpm_prefork_module“ ähnliche Werte:

# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
#war 1,1,5,10,0
<IfModule mpm_prefork_module>
StartServers       6
MinSpareServers    3
MaxSpareServers    3
MaxClients        100
    MaxRequestsPerChild   1000
</IfModule>

Was bedeuten die einzelnen Werte?

MaxClients: Dieser Parameter bestimmt die Anzahl der Apache Prozesse und somit die maximale Anzahl der Client Verbindungen, die vom Webserver zugelassen werden (Voraussetzung: prefork MPM). Wenn worker MPM verwendet wird, limitiert der Wert die Anzahl der Threads, die für die Clients zur Verfügung stehen.

MinSpareServers: Bei Verwendung von prefork MPM kann mit diesem Parameter definiert werden, wie viel unbeschäftigte (spare) Prozesse dem Apachen mindestens zur Verfügung stehen. Wenn eine neue Anfrage an den Webserver gestellt werden, nimmt der Apache einen dieser unbeschäftigten Prozesse. Dadurch wird die Anfrage schneller beantwortet, da dafür nicht ein neuer Prozess erstellt werden muss.

MaxSpareServers: Dieser Parameter legt fest, wie viel unbeschäftigte Prozesse maximal vorgehalten werden. Dieser Wert soll nicht zu hoch angesetzt werden, da jeder Prozess, auch wenn er „unbeschäftigt ist“, dann unnötig Arbeitsspeicher belegt.

ThreadsPerChild: Dieser  Parameter legt fest, wie viel Threads pro Prozess zugelassen werden sollen.
StartServers: Dieser Parameter legt fest, wie viel Prozesse beim Serverstart erstellt werden sollen.
MaxRequestsPerChild: Der Parameter MaxRequestsPerChild legt die maximale Anzahl von Anfragen fest, die ein Kindprozess während seiner Lebenszeit bearbeitet. Nachdem diese Grenze erreicht wurde, wird dieser Kindprozess terminiert. Ein MaxRequestsPerChild von 0 bedeutet, dass ein Kindprozess niemals endet.
Die Begrenzung von MaxRequestsPerChild (ungleich Null) hat folgende Vorteile:

  1. Sollte ein Prozess aufgrund eines Fehlers „Amok laufen“, begrenzt dieser Wert die Menge an Arbeitsspeicher, die der fehlerhafte Prozess belegen kann.
  2. Die Anzahl der Prozesse werden reduziert, wenn die Last des Servers nach einer hohen Auslastung wieder zurückgeht.

Apache-Default-Werte und empfohlene Werte
StartServers: 5
MinSpareServers: 5
MaxSpareServers: 10
MaxClients: 256
MaxRequestsPerChild: 0 oder 10000
MaxClients: Wenn dieser Wert größer als 256 gesetzt wird, muss zusätzlich der Parameter ServerLimit entsprechend erhöht werden.

Ein Plesk-Server (Parallels Virtuozzo-Server) bricht unter weniger User-Last ein
Interessant ist die Standard-Einstellung von virtualisierten Servern, beispielsweise von Webservern, die mit Parallels Plesk virtualisiert sind. Hier findet man folgende Werte:

StartServers       1
MinSpareServers    1
MaxSpareServers    5
MaxClients        10
MaxRequestsPerChild   0

Diese Einstellung bedeutet, dass der Server nur maximal 10 Clients zulässt. Dieser Werte können sich sehr schnell als „Flaschenhals“ erweisen und den Zugriff von Benutzern verhindern. Der Gedanke von Plesk ist klar: Auf dem Gesamtsystem sorgen diese Einstellungen dafür, dass die virtualisierten Server mit minimalen Zugriffen laufen und somit das Gesamtsystem nicht übermäßig belasten. Jedoch sind diese Werte, gerade bei aktueller Hardware, mehr als unpassend. Eine Erhöhung der Werte auf die Apache-Standard-Werte sollte ein erster Anhaltspunkt für die Performance-Optimierung sein. Nachdem man mit dieser Werten weitere Erfahrungen gesammelt hat, können diese Werte weiter optimiert werden.

Apache Restart nach Änderungen an der apache2.conf
Eine Änderung der Werte in der Apache-Config wirkt sich erst aus, nachdem der Apache Webserver neu gestartet wurde.

/etc/init.d/apache2 restart

Schreibe einen Kommentar