Frage php5-fpm: Server hat pm.max_children erreicht


Ich habe Nginx + php5-fpm. Mehrmals pro Stunde bleibt meine Website stecken und im Logfile sehe ich folgendes:

    WARNING: [pool www] server reached pm.max_children setting (5), 
consider raising it.

/etc/php5/fpm/pool.d/www.conf Datei enthält die folgende Konfiguration:

pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

Server:  AMD Opteron 3280, Octo-Core, 8x 2,4 GHz, 16 GB DIMM (DDR3).

Ich habe keine Ahnung welche Nummern ich in die www.conf Datei für diesen Server legen soll. Kann ich jemandem helfen? Vielen Dank


34
2018-02-16 10:30


Ursprung




Antworten:


Es gibt viele mögliche Gründe, warum Ihr PHP-FPM die max_children erreicht. Die häufigsten sind:

  • Viele parallele Anfragen von Ihren Kunden
  • Langsame Ausführung der PHP-Skripte
  • Sehr niedrige Einstellung der max_children

Betrachtet man die Spezifikationen Ihrer Maschine, vorausgesetzt, es gibt nichts anderes als PHP + Nginx läuft, denke ich, Sie könnten es viel höher als 5 setzen. Sie sagen, Sie haben 8 Kerne, normalerweise braucht Nginx viel weniger CPU als PHP, also mit 5 Kindern Sie werden wahrscheinlich nie alle von ihnen verwenden können. Ich setze es normalerweise auf etwas wie die Anzahl der Kerne x 2 oder die Anzahl der Kerne x 4, abhängig von der Speicherbelegung Ihrer PHP-Skripte.


35
2018-02-16 13:50



Es ist eine Dating-Website mit PHP-Chat und Benutzer senden Millionen von Sofortnachrichten. Letzte Nacht, als ich ~ 300 Benutzer online hatte, war der Befehl netstat -an | grep 80 | wc - Ergebnis fast 400. - user1821484
Ich habe eine ähnliche Dating-Website. Ich denke du brauchst definitiv mehr PHP-Kinder. Meine Konfiguration ist wie folgt: 20k gleichzeitige Online-Benutzer, 12 PHP-Maschinen mit jeweils 8 Kernen, 32 Arbeiter auf jedem der PHP-Maschinen. Das funktioniert ziemlich gut. Sie sollten auch schauen, wie viel freien Speicher Sie haben, ich vermute, Sie haben einige, es sei denn, Ihr PHP ist riesig. Wenn du freien Speicher hast, warum nicht für mehr Arbeiter? - mauro.stettler
@ user1821484 Das ist korrekt; pm.max_children ist viel zu niedrig. Ein Wert von 10 ist für einen kleinen VPS-Server mit 1 GB RAM sinnvoll; Sie haben einen viel größeren Server. Erhöhen Sie diesen Wert, bis Sie die Fehler nicht mehr erhalten, und heben Sie ihn erneut an, falls Sie eine Verkehrsspitze bekommen. - Michael Hampton♦
Danke für die Antworten. Ich erhöhte pm.max_children auf 10 und jetzt fing ich an, diesen Fehler zu bekommen: WARNUNG: [pool www] scheint beschäftigt (Sie müssen möglicherweise pm.start_servers oder pm.min / max_spare_servers erhöhen), launching 16 Kinder, gibt es 0 Leerlauf und insgesamt 8 Kinder. Kann mir jemand vorschlagen, was ich erhöhen muss? Vielen Dank. - user1821484


Ich habe festgestellt, dass das Festlegen des Werts pm.max_requests (der standardmäßig auskommentiert ist) beim Beheben dieser Fehler geholfen hat. Mit dieser Einstellung werden untergeordnete Anforderungen nach der Ausführung einer bestimmten Anzahl von Anforderungen erneut gestartet. Dies kann hilfreich sein, wenn irgendwo im Code oder in den Bibliotheken von Drittanbietern Speicherlecks auftreten.

Im /etc/php-fpm.d/www.conf:

pm.max_requests = 500

15
2018-02-27 09:46





Diese Verknüpfung kann nützlich sein - es erklärt, wie die Anzahl der untergeordneten Prozesse basierend auf der Speichermenge auf dem System berechnet wird:


8
2018-02-27 09:54



Diese Antwort wird nutzlos sein, sobald der Link verschwindet. - miken32
Im Grunde sagt der Link ... Der passende Wert für pm.max_children kann wie folgt berechnet werden: pm.max_children = Gesamt-RAM für den Webserver / Max. Prozessgröße des Kindes - jaywhy13