WARNUNG: [pool www] scheint ausgelastet zu sein (möglicherweise müssen Sie pm.start_servers oder pm.min/max_spare_servers erhöhen), spawnen [closed]

Lesezeit: 5 Minuten

Benutzer-Avatar
Çağrı Can Bozkurt

Ich habe einen CentOS-Server. System ist nginx/php-fpm. Es hat 16 GB RAM. CPUs: 8

CPU-Frequenz: 2660,203 MHz

Warum erhalte ich diesen Fehler in meinem Fehlerprotokoll?

php-fpm/error.log:

[02-Aug-2014 17:14:04] WARNUNG: [pool www] scheint ausgelastet zu sein (möglicherweise müssen Sie pm.start_servers oder pm.min/max_spare_servers erhöhen), erzeugt 8 untergeordnete Elemente, es gibt 0 untätige und insgesamt 21 untergeordnete Elemente

Dies ist meine php-fpm-Konfiguration für den WWW-Pool:

php-fpm/www.conf:

pm = dynamisch

pm.max_children = 32768

pm.start_servers = 10

pm.min_spare_servers = 10

pm.max_spare_servers = 10

pm.max_requests = 5000

Wie kann das Problem behoben werden?

  • lol an Leute, die nicht verstehen, was seine Frage ist. Es ist fett gedruckt und hat ein Fragezeichen am Ende.

    – Dan P.

    8. September 2017 um 11:23 Uhr


Benutzer-Avatar
Rijndael

Es ist ein harter Keks, da zahlreiche Faktoren eine Rolle spielen können. Das erste Problem mit Ihrer Konfiguration ist die max_children ist lächerlich hoch. Wenn jeder untergeordnete Prozess verwendet 50 MB dann 50 x 32768 würde sich leicht erschöpfen 16 GIGABYTE.

Ein besserer Weg, um zu bestimmen max_children ist herauszufinden, wie viel jeder untergeordnete Prozess verwendet, dann den maximalen RAM zu berücksichtigen, den php-fpm verwenden soll, und dann die Werte zu teilen. Wenn ich beispielsweise einen 16-GB-Server habe, kann ich den folgenden Befehl ausführen, um festzustellen, wie viel RAM jedes php-fpm-Kind verbraucht:

ps -ylC php-fpm --sort:rss

Notiz! Es kann erforderlich sein, den Benutzer explizit anzugeben, wenn php-fpm läuft unter dem anderen.

ps -ylC php-fpm --sort:rss -u www-data

wo www-Daten ist der Benutzer, unter dem php-fpm ausgeführt wird.

Sie suchen nach der RSS-Spalte; Es gibt den residenten Speicher an und wird in KB gemessen. Wenn ich durchschnittlich 50 MB pro Prozess habe und maximal 10 GB für php-fpm-Prozesse verwenden möchte, dann mache ich nur 10000 MB \ 50 MB = 200. Auf dieser Grundlage kann ich also verwenden 200 Kinder für meinen angegebenen Speicherverbrauch.

In Bezug auf die Server möchten Sie nun die festlegen max_spare_servers auf x2 oder x4 die Anzahl der Kerne. Wenn Sie also eine 8-Kern-CPU haben, können Sie mit einem Wert von beginnen 16 zum max_spare_servers und geh nach oben 32.

Das start_servers Der Wert sollte etwa die Hälfte betragen max_spare_servers Wert.

Sie sollten auch erwägen, die zu löschen max_requests um herum 500.

Auch zusätzlich zu dynamicdas pm Wert kann auch eingestellt werden static oder ondemand.

  • static hat immer eine feste Anzahl von Servern, die zu einem bestimmten Zeitpunkt laufen. Dies ist gut, wenn Sie eine konstante Anzahl von Benutzern haben oder sicherstellen möchten, dass Sie den maximalen Speicher nicht überschreiten.
  • ondemand startet Prozesse nur dann, wenn sie benötigt werden. Der Nachteil ist offensichtlich, dass ständig Prozesse gestartet/beendet werden müssen, was normalerweise zu einer sehr geringen Verzögerung bei der Bearbeitung von Anfragen führt. Der Vorteil ist, dass Sie Ressourcen nur dann verwenden, wenn Sie sie brauchen.
  • dynamic startet immer X Anzahl von Servern, die in der angegeben sind start_servers Option und erstellt bei Bedarf zusätzliche Prozesse.

Wenn Sie immer noch Probleme mit dem Speicher haben, sollten Sie einen Wechsel in Betracht ziehen pm zu ondemand.

Dies ist eine allgemeine Richtlinie, Ihre Einstellungen müssen möglicherweise weiter angepasst werden. Es geht wirklich darum, mit den Einstellungen zu spielen und Benchmarks für maximale Leistung und optimale Ressourcennutzung auszuführen. Es ist etwas mühsam, aber es ist der beste Weg, diese Art von Einstellungen zu bestimmen, da jedes Setup anders ist.

  • Ich wusste nicht, warum max_requests 500 sein sollte? In meinem Fall möchte ich, dass mein Server bis zu 5000 CPUs bedient

    – krz

    13. Juli 2016 um 4:06 Uhr


  • Bei max_requests geht es nicht darum, wie viele gleichzeitige Anfragen verarbeitet werden können. Dies bedeutet, dass nach 500 Anfragen (eine nach der anderen) des untergeordneten PHP-Prozesses dieser beendet und dann als neuer, unbenutzter Prozess neu gestartet wird. Es hilft, Speicherlecks zu bekämpfen.

    – Jan Stibila

    8. Dezember 2017 um 11:00 Uhr

  • Dies ist eine gute Erklärung, aber der RSS-Wert im Befehl ps enthält den Speicher, der von geladenen gemeinsam genutzten Bibliotheken verwendet wird (stackoverflow.com/questions/7880784/…). Beim Testen habe ich festgestellt, dass ich, wenn max_children basierend auf dem oben Gesagten 50 sein sollte, dies ohne Probleme auf 150 setzen kann. Ich würde sagen, es ist eine Einstellung zum Optimieren, nicht zum Einstellen mit einer festen Formel.

    – markdwhite

    16. August 2018 um 5:26 Uhr

  • pm.max_requests entsprechend php.net: Die Anzahl der Anforderungen, die jeder untergeordnete Prozess ausführen soll, bevor er erneut gestartet wird. Dies kann nützlich sein, um Speicherlecks in Bibliotheken von Drittanbietern zu umgehen. Geben Sie für eine endlose Anforderungsverarbeitung ‘0’ an. Gleichwertig PHP_FCGI_MAX_REQUESTS. Standardwert: 0.

    – Eje

    22. März 2020 um 9:02 Uhr


  • Sind Sie sicher, dass die Erklärung für max_spare_servers und start_servers richtig ist? Trotz des Namens heißt es in der Dokumentation, dass es auch um “Kinder” geht. Diese Einstellungen sollten wahrscheinlich proportional mit max_children skalieren und nicht auf der Anzahl der Kerne basieren?

    – Marcovtwoout

    23. Juli 2021 um 8:55 Uhr

1297770cookie-checkWARNUNG: [pool www] scheint ausgelastet zu sein (möglicherweise müssen Sie pm.start_servers oder pm.min/max_spare_servers erhöhen), spawnen [closed]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy