PHP Fehlermeldung

Unifex

New Member
Einer meinem Nginx Server, bleibt ab und zu mal stehen, wenn man auf eine dort gehostete Webseite zugreifen will.

Nach langem Suchen, bin ich dann wohl auf die entscheidende Fehlermeldung gekommen.

In der Datei php5-fpm.log steht:

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

In der www.conf bei mir sind folgende Einstellungen:

Code:
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
;pm.process_idle_timeout = 10s;
;pm.max_requests = 500

Es handelt sich um einen Server mit 8 Cores und 32 GB Ram.

Ist es damit getan pm.max_children = 5 auf sagen wir pm.max_children = 50 zu setzen?
 
Hallo,

ich weiß jetzt zwar nicht, was noch alles auf deinem Server läuft, aber sofern es nur nginx und php sein sollten, hast du ja mehr als genug RAM-Reserven.

Als Faustregel nehme ich bei mir immer die Anzahl der Cores der CPU x 4 als pm.max_children. Bei deiner config wären das 32.
Ich bin damit bisher immer gut gefahren. du kannst bei deiner Maschine aber auch eine merklich höhere Anzahl an pm.max_children setzen, damit wärst du auf der sicheren Seite.

Edit: Bedenke aber, dass für jeden PHP Child-Prozess eine feste Menge an Arbeitsspeicher reserviert wird. Wenn man den Wert der pm.max_children also zu hoch setzt, kann es sein, dass derart viel RAM reserviert wird, dass z.b. für mysql nichtmehr genügend RAM übrig ist.

Gruß homeserver
 
Last edited by a moderator:
kann es sein, dass derart viel RAM reserviert wird
Reservierter aber (noch) nicht benutzter RAM stört unter Linux nicht sonderlich da es den RAM overcommited. Dies hat mehrere Nachteile (OOM Killer) aber auch wie auch hier Vorteile. Zumal bei einem Fork wird, zumal dank Copy-on-write generell viel weniger RAM benötigt als eigentlich reserviert weshalb größere Werte belegt werden können.
 
Danke für die Super Erklärung.

Also auf dem Server läuft auch noch Mysql und der greift sich auch nicht wenig.

Ich hatte in der Zwischenzeit einfach mal mit den Werten gespielt in Unkenntnis, was eurer Erklärung.

Mit diesen Werten trat es nicht mehr auf:
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 10
pm.max_spare_servers = 10
;pm.process_idle_timeout = 10s;
pm.max_requests = 500

Allerdings hat der Server dann in den paar Tagen auch 5 Mb geswappt :)

Das dürfte also etwas oversized gewesen sein.


Vielleicht mal so probieren:

Ich vermute, jeder "Server" bietet dann also 50 Child-Prozess.
Also in meiner Config dann 500.

Sehe ich das richtig?
 
Wenn der RAM knapp wird, kann "pm = ondemand" helfen. Wenn ein bisschen im Swap gelandet ist, heißt das aber nicht unbedingt, dass der RAM knapp ist. Einfach die Auslastung ohne Disk Cache mit "free -m" ansehen, wenn der Server gerade stark belastet ist.
 
Code:
 free -m
             total       used       free     shared    buffers     cached
Mem:         32138      31721        416          0        180      22860
-/+ buffers/cache:       8681      23456
Swap:        16382          5      16377
 
Es wird nicht nur geswappt, wenn der RAM voll ist. Bzw. nicht mit der default Swappiness, welche 60 beträgt. Nur wenn du sie auf 0 setzen würdest, würde der Kernel nur swappen, um OOM zu vermeiden. Am besten du informierst dich mal über die Kernel-Einstellung "vm.swappiness" (Google).
 
Back
Top