Ich habe ein SAAS-Produkt, das auf PHP sowie Apache2 und MySQL basiert und auf AWS gehostet wird. Meine Produktion ist in Spitzenzeiten sehr, sehr langsam und wenn ich den Serverstatus überprüfe, wird angezeigt, dass die Anzahl der inaktiven Arbeiter 0 (null) beträgt. Ich verwende mpm-prefork
Current Time: Monday, 24-Aug-2020 19:36:32 UTC
Restart Time: Friday, 14-Aug-2020 06:03:27 UTC
Parent Server Config. Generation: 12
Parent Server MPM Generation: 11
Server uptime: 10 days 13 hours 33 minutes 5 seconds
Server load: 1.17 1.07 0.95
Total accesses: 28851443 - Total Traffic: 824.8 GB
CPU Usage: u289.99 s50.68 cu0 cs0 - .0373% CPU load
31.6 requests/sec - 0.9 MB/second - 30.0 kB/request
256 requests currently being processed, 0 idle workers
Folgendes ist meine Einstellungsdatei mpm-prefork.conf
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxRequestWorkers 450
MaxConnectionsPerChild 0
</IfModule>
Der TOP-Befehl unter Ubuntu 20.04 gibt mir Folgendes:
top - 20:03:58 up 143 days, 11:16, 1 user, load average: 0.48, 0.71, 0.83
Tasks: 369 total, 3 running, 317 sleeping, 0 stopped, 0 zombie
%Cpu(s): 15.9 us, 3.2 sy, 0.0 ni, 79.9 id, 0.0 wa, 0.0 hi, 1.0 si, 0.0 st
KiB Mem : 7865072 total, 1023492 free, 2752320 used, 4089260 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 4755856 avail Mem
Den Details zufolge ist noch 1 GB RAM frei. Warum gibt es dann keine inaktiven Worker? Und warum gibt es bei nur 256 Anfragen keine inaktiven Worker, wenn ich MaxRequestWorkers auf 450 setze? Der maximale RAM in der Maschine beträgt 8 GB.
Antwort1
Wenn Sie mit MPM Prefork erhöhen, MaxRequestWorkers
müssen Sie auch erhöhen ServerLimit
.
Für nicht-threadbasierte Server (d. h. Prefork) wird MaxRequestWorkers in die maximale Anzahl von untergeordneten Prozessen übersetzt, die gestartet werden, um Anfragen zu bearbeiten. Der Standardwert ist 256. Um ihn zu erhöhen, müssen Sie auch ServerLimit erhöhen.
https://httpd.apache.org/docs/2.4/mod/mpm_common.html#maxrequestworkers
Antwort2
Mit mpm_prefork erzeugt der Webserver neue Prozesse zur Bearbeitung von Anfragen. Jeder Prozess kann jeweils nur eine Anfrage gleichzeitig bearbeiten.
In Ihrem Beispiel ist Ihr Webserver so eingerichtet, dass mindestens 5 und höchstens 10 inaktive Serverprozesse auf die Bearbeitung von Anfragen warten. Da Sie über 250 gleichzeitige Anfragen bearbeiten, kann es sein, dass Ihr Webserver nicht schnell genug neue Prozesse erzeugen kann.
Ich würde die Werte „StartServers“, „MinSpareServers“ und „MaxSpareServers“ erhöhen, um sicherzustellen, dass Sie für Lastspitzen oder hohe Belastungen ausreichend Kapazität zur Verfügung haben.
Abhängig von der Art der Arbeitslast, die Sie bewältigen müssen, möchten Sie möglicherweise auch einen Wechsel zu einem anderen Multi-Processing-Modul in Betracht ziehen.
Bearbeiten: Die Antwort von @tetech ist richtig, Sie können jedoch auch eine Anpassung dieser Werte in Betracht ziehen, da dies die Leistung des Webservers verbessern könnte.