Jeder PHP-Worker belegt Speicher, ob beschäftigt oder untätig. Zu wenige, und Anfragen stauen sich hintereinander; zu viele, und der Maschine geht der Speicher aus, sie swappt und wird langsamer, als sie mit weniger gewesen wäre.
Einen Worker messen
ps -ylC php-fpm8.3 --sort:rss | awk '{sum+=$8; n++} END {print sum/n/1024 " MB average"}'
Typischerweise 30-80 MB. Ein schweres Framework oder viele Plugins treiben das nach oben, und es zählt Ihre eigene Zahl, nicht eine typische.
Die Rechnung
max_children = (RAM available to PHP) / (average worker size)
# 8GB box, 2GB for the database and the system, 50MB a worker:
# 6000 / 50 = 120 - then be conservative and use 80
Lassen Sie Luft. Ein Worker, der auf eine schwere Seite trifft, braucht ein Vielfaches des Durchschnitts, und ein exakt auf das Limit dimensionierter Pool überschreitet es in dem Moment, in dem der Verkehr ungewöhnlich wird - also genau dann, wenn er halten soll.
static, dynamic oder ondemand
- static - alle Worker starten beim Hochfahren. Am schnellsten und belegt den Speicher, ob beschäftigt oder nicht. Richtig für eine dedizierte Maschine unter gleichmäßiger Last.
- dynamic - hält einige in Reserve und wächst bis zum Limit. Die vernünftige Vorgabe.
- ondemand - startet bei Bedarf und beendet nach einer Wartezeit. Geringster Speicher, kleine Verzögerung bei der ersten Anfrage. Richtig für viele kleine Websites auf einer Maschine.
pm = dynamic
pm.max_children = 80
pm.start_servers = 12
pm.min_spare_servers = 8
pm.max_spare_servers = 24
pm.max_requests = 500
max_requests ist eine Leck-Versicherung
Nach so vielen Anfragen wird ein Worker verabschiedet und ein frischer übernimmt. Es kostet fast nichts und hält ein langsames Leck in jeder Bibliothek in Schach, die Ihnen nicht gehört.
Prüfen, ob Sie an die Grenze stoßen
grep "server reached pm.max_children" /var/log/php8.3-fpm.log
Diese Zeile heißt, dass sich Anfragen gestaut haben. Erscheint sie nie, ist der Pool groß genug, und ihn zu erhöhen macht nichts schneller.
Auf EGPHP-Hosting wird der Pool für Sie dimensioniert und überwacht. Das hier gilt einem VPS, den Sie selbst betreiben und auf dem die Vorgabe selten zur Maschine passt.