php5-fpm Fehler



Unifex

New Member
Ich setzte auf einem Server Nginx und php5-fpm ein.

Folgende Fehlermeldung ist aufgetaucht:

Code:
WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 8 children, there are 0 idle, and 15 total children

In meiner www.conf stehen unter anderem folgende Werte:

pm = dynamic
pm.max_children = 50
pm.start_servers = 4
pm.min_spare_servers = 4
pm.max_spare_servers = 8
pm.max_requests = 500

Jetzt frage ich mich, wo ansetzen.

Ich verstehe meine Config so, dass 50 php Prozesse gleichzeitig möglich sind und diese auf vier bis acht Server verteilt werden. Ist das richtig?
Somit würde doch die Erhöhung des Wertes pm.start_servers, wie in der Meldung angegeben, überhaupt nichts bringen.

Ich betreibe übrigens da eine 4 Core + HT Konfiguration.
Ram wäre noch reichlich frei.
 
Ja, steht auf Dynamic.

Den Rest verstehe ich nicht. Du schreibst: "Er kann nicht weniger Server starten zu Beginn als die von Dir als Minimum gewünscht sind."


pm.start_servers und pm.min_spare_servers haben doch den gleichen Wert (4)

Warum sollte er also weniger starten?

Bei der Formel kommt doch auch 4 raus oder?
 
Hey,
( min_spare_servers + (max_spare_servers - min_spare_servers)) / 2 = 4 !
min_spare_servers + (max_spare_servers - min_spare_servers) / 2 = 6 !
Hast Du mal min_spare_servers mit fünf oder sechs versucht?
emerge
 
Nein habe ich nicht. Würde das denn überhaupt was bringen in diesem Fall.

So ganz verstehe ich die Fehlermeldung auch nicht.

Kannst du die vielleicht für mich mal zum Verständnis entschlüsseln.

Also 50 PHP Sessions können gleichzeitig laufen (pm.max_children = 50)

Und warum kann der sie jetzt nicht auf die "Server" verteilen=

Sollte nicht viel mehr der Wert pm.max_children hochgesetzt werden, damit er mehr gleichzeitig verarbeiten kann?
 
Hey,
ich war davon ausgegangen, dass Anzahl der start_server > sein muss als das Minimum und nicht nur größer gleich. Habe gerade mal meinen Server mit Deinen Einstellungen des ersten Posts gestartet. Meiner startet einwandfrei!
Tut mir Leid, dann kann ich auch nicht weiterhelfen.:(
emerge

Ergänzung: Viellicht sind noch irgndwo anders Restriktionen, die Deine Anzahl von 50 Prozessen beschränken?
 
Last edited by a moderator:
Ja, ich finde das eben auch nicht so eindeutig diese Fehlermeldung.

Ich könnte natürlich mit neuen höheren Werten experimentieren aber lieber noch würde ich die besser verstehen.

Vielleicht gibt es ja noch weitere Leute hier, die so eine Config am laufen haben und mir weiter helfen können.
 
Hey,
vor zwei Jahren hat man sich hier schon einmal Gedanken gemacht, dass müsste Dir weiterhelfen:

emerge

Ergänzung:

Nun bin ich fündig geworden, was eine gute nachvollziehbare Beschreibung betrifft: http://www.admin-magazin.de/Das-Heft/2012/06/Der-PHP-Interpreter-PHP-FPM

Ja, es ist richtig, mit der Vorgabe von pm.max_children = 50 dürfen maximal 50 Prozesse können zur gleichen Zeit ausgeführt werden. Jeder dieser Prozesse kann eine Anfrage erledigen. Mit der Initialisierung pm.start_servers = 4 plus den von Dir automatisch gestarteten ersten Prozess laufen nach dem Start fünf Prozesse. Die Anzahl der Prozesse insgesamt wird mit pm.max_spare_servers = 8 auf 8 beschränkt. In Deiner php.ini ist ein Eintrag über das Memory_limit. Beträgt das Memory_limit 32 MB, dann ergibt sich hieraus ein Speicherbedarf von max. 50*32MB= rd. 1,5 GB. Mit pm.max_requests = 500 legst Du fest, dass nach 500 Anfragen an einen Prozess dieser neu gestartet wird. Default ist 0 = Anzahl der Anfragen unbegrenzt.

emerge
 
Last edited by a moderator:
Danke für die tolle Erklärung. langsam lichtet sich das Dunkel :)

Jetzt ist mir nur noch nicht die genaue Funktion der Serverprozesse klar.


pm.max_children = 50 .Hier dürfen maximal 50 Prozesse gleichzeitig laufen (connection)

Allerdings schreibst du auch: Die Anzahl der Prozesse insgesamt wird mit pm.max_spare_servers = 8 auf 8 beschränkt.

Bedeutet für mich, eigentlich können 50 Prozesse laufen aber dank Server Definition können es maximal bei mir 8 sein?

Kann das sein?
Was machen denn nur diese Serverprozesse genau ?
 
Allerdings schreibst du auch: Die Anzahl der Prozesse insgesamt wird mit pm.max_spare_servers = 8 auf 8 beschränkt.
... ja das sehe ich so!
Was machen denn nur diese Serverprozesse genau ?
... Jeder Serverprozess arbeitet als eine Instanz des PHP-Interpreters. Jeder Serverprozess ist ein Start eines PHP-Programmes, welcher vom PHP-Interptreter abgearbeitet wird.

Und wenn Du noch weiter einsteigen möchtest, empfehle ich Dir echt den Kauf des Artikels ich finde den Artikel gut.

Übrigens im Artikel steht auch, dass FPM bisher nur für Linux zugeschnitten ist und nicht für Windowsserver!

emerge
 
Wo ist eigentlich der Unterschied zwischen den beiden Befehlen?

service php5-fpm reload

und

service php5-fpm restart


Reicht ein Reload eigentlich, um die neuen Werte in der www.conf zu übernehmen? Bisher habe ich das jedenfalls immer so gemacht.
 
Hey,
freut mich, wenn ich weiterhelfen konnte. Wenn Dein Anliegen dieses ursprünglichen Threads gelöst ist, wäre es nett, wenn Du diesen Thread auf gelöst setzt - Danke!

Wenn Du eine neue Frage hast, möchte ich Dich bitten, einen neuen Thread zu öffnen, damit andere, die auf der Suche nach Lösungen sind, eine bessere Chance haben das Gesuchte zu finden - Danke! :)

emerge
 
Ein Reload erstellt neue Prozesse, die die neue Konfiguration laden, und lässt die alten sterben. Beim Restart werden die aktuellen Prozesse und somit ggf. auch aktive Requests gekillt, das kann man eigentlich vermeiden. So manche Software braucht aber ab und an einen Restart. =)
 
Back
Top