pm.max_children, php-fpm, wieviel kann man setzten?
Hallo zusammen
ich habe einen raspi 4B mit 4GB.
auf diesem läuft mein localer server. Mehrere ESP senden sekündlich einen Request, bestehend auch max. 40 zeichen an ein php script........ das script wertet dann eineige daten aus und schreibt minimale mysql einträge.
plötzlich funktioniert mein php server nicht mehr. nach ewiger suche, hier die lösung:
server reached pm.max_children setting (5), consider raising it
mein wert war auf 5 gestellt.
kann ich bei einem 4GB raspi den wert auf 20 steigern? was ist hier möglich? danke
2 Antworten
Diesel Quelle httpshttps://help.nextcloud.com/t/php-fpm-optimization-on-raspberry-pi/160363 sagt 5 respective 7 für einen 3B und diese hier ://intux.de/2020/05/25/php-fpm-einstellungen-fuer-nextcloud/?noamp=available sagt sogar 120 sind okay für Nextcloud. 🤷♂️
Meine Devise wäre ausprobieren. Mehr als Abschmieren kann dir das system nicht 😜
Ist letzlich eine Frage davon, wie groß die einzelnen Prozesse wohl so werden. Wenn das z.B. 100MB wären, dann wären maximal 20 Kinder vielleicht nicht so prickelnd.
Bleibt ein Kind typischerweise unter 5MB, dann würden auch ein Wert von 100 kaum zu Problemen führen.
Ne, die Prozessgröße ergibt sich ja unter anderem aus dem was die einzelnen PHP-Prozesse so brauchen.
Ich bin nicht ganz sicher wie php-fpm das Prozessmanagement exakt regelt, childs (children) sind die zahl der php-Prozesse. Ansich ist fpm ja dazu da, daß gerade nicht für jeden Request ein Prozess gespawned wird - sonst könnte man auch gleich mod_php nehmen.
okay, das heißt einfach mal austesten ob und wie gut es mit 50 funktioniert....
Joah, und es scheint so, daß für jeden Request ein fpm-child laufen muß - Wenn wir davon ausgehen, daß die 20 ESPs relativ zeitgleich ihren Request absetzen, dann wirst du erinen Wert über 20 brauchen.
Und dann ist auch die Frage, ob man nicht min_psarse entsprechend setzt.
Mein Fehler:
pm.min_spare_servers
int
Die gewünschte Mindestanzahl an Serverprozessen im Leerlauf.
Wird nur verwendet, wenn pm auf dynamicgesetzt ist.
Ebenfalls zwingend notwendig.
Das ist quasi die Zahl der unbeschäftigtenKindsprozesse. Wenn wir annehmen, daß Du z.B. 20 erzeugte Prozesse hast, die am abarbeiten sind udn nun ein neuer Request reinkommt, dann müßte erst ein neues Kidn erzeugt werden. Da würde ich ggf. nen Wert von 5-10 vorhalten.
Okay.... Leider hatte ich bei 20 wieder das problem....
Bedeutet pm.min_spare_servers von 10, dass ich in Summe 30 habe und nicht 20 kindsprozesse?
Wäre es dann besser 20 kindsprozesse und 10 min spare zu verwenden, ansttatt gleich 30 kindsprozessr anzugeben?
Kann ich die durchschnittliche Größe von prozessoren auslesen? Oder kann ich irgendwie mitzeichnen, welcher request welchen Prozess startet und wieviel speicher der benötigt?
Dann wurde ich es mal 5 minuten Protokollieren und durchsehen...
Max ist immer noch der obere Deckel. Eventuell fängst Du mit sowas wie 5/25 an und schaust dann auch mal vom Speicher her, wie es aussieht.
Speicherverbrauch kann man mit ps ermitteln, schau mal hier
https://tideways.com/profiler/blog/an-introduction-to-php-fpm-tuning
Da wird auch ein kleines Pythonskript zur Vereinfachung verlinkt udn auch mehr zum Tunin von fpm erklärt.
super link! danke
dennoch ein kurze abschließende frage:
bevor du mir den link gesendet hast, habe ich max_chil einfach mal auf 50 gesetzt.
ich habe eine rund um die uhr RAM abfrage meiens raspberrys. a sind NIE mehr als 50% ausgelastet. das würde bedeuten, dass noch 2GB Ram frei sind, trotz den 50 child prozessoren... kann ich das dann nicht einfach so belassen?
Danke
Ja, dann sollte 50 soweit in Ordnung sein.
Im Endeffekt werden ja eh weniger genutzt, wenn weniger gebraucht werden. Interessant wird das halt, wenn nicht nur ein einfaches Skript läuft, denn dann könnte da durchaus mehr RAM in Nutzugn sein ;-).
okay. ist jeder http-request zur selben zeit ein "children"
was genau ist ein children? ich benutzte es nur für mein heimnetzwerk.....
kann ich irgendwo die maximale prozess größe pro prozess setzen?