Ich habe einen Apache 2.4- Webserver, der auf einer Mikroinstanz von AWS mit CentOS ausgeführt wird.
Auf dem Apache wird PHP mit einem Prefork-MPM-Modul ausgeführt.
Auf den Server wird über einen Amazon Load Balancer zugegriffen, der über eine Integritätsprüfung verfügt, die alle 60 Sekunden versucht, auf die index.php-Webseite des Servers zuzugreifen.
Das Problem ist, dass Apache nach 1-2 Tagen irgendwie 256 geöffnete Prozesse mit der Seite index.php erreicht und den folgenden Fehler ausgibt:
[Sun Sep 08 02:13:00.356051 2013] [mpm_prefork:error] [pid 1201] (12)Cannot allocate memory: AH00159: fork: Unable to fork new process
[Sun Sep 08 02:13:13.656694 2013] [mpm_prefork:error] [pid 1201] AH00161: server reached MaxRequestWorkers setting, consider raising the MaxRequestWorkers setting
In diesem Fall werden normalerweise keine neuen http-Verbindungen mehr akzeptiert.
Apache schließt wahrscheinlich nicht alle Verbindungen des Load Balancers.
Wir haben einen anderen Server mit Apache 2.2, der dieses Problem nicht hat. Wahrscheinlich liegt das Problem bei der Version 2.4, die sich stark von 2.2 unterscheidet (wir haben keine Standardkonfigurationen von Apache geändert).
mod_status ist aktiviert und hier ist die Ausgabe, die wir erhalten könnten, wenn dies einmal passiert ist: http://www.speedyshare.com/vE3My/server-status.txt
Weiß jemand, wie wir dieses Problem angehen können?
Danke im Voraus!
<IfModule prefork.c>
und überprüfen Sie die Anzahl Ihrer ausgeführten httpd-Prozesse. Möglicherweise müssen Sie Anpassungen vornehmenServerLimit
.Antworten:
Ich habe festgestellt, dass Apache-Prozesse anschwellen (Speicherverlust), wenn sie auf unbestimmte Zeit wiederverwendet werden. Es lohnt sich, eine
MaxRequestsPerChild 200
in Ihrer httpd.conf festzulegen und neu zu starten.quelle