PHP-FPM Einstellungen optimieren

Heute geht es darum den unter PHP Nutzern bekannten FastCGI Process Manager (FPM) richtig zu konfigurieren und zu optimieren. (https://php-fpm.org/)

Die meisten PHP Anwendungen verwenden Heutzutage den PHP-FPM um Ihre PHP Anwendungen auszuliefern. In Kombination mit NGINX als Webserver ist dies mit einer der effektivsten Methoden eine Webanwendung mit PHP im Produktiveinsatz laufen zu lassen.

Der Teufel steckt im Detail

Bei FPM reichen schon ein paar falsch gesetzte Werte und schon startet der FPM Prozess nicht mehr oder der Speicher des Servers läuft voll oder oder oder ... die Liste ist lang ;)

Häufige Fehler die auftreten können:
  • FPM Master Prozess startet nicht mehr
  • RAM des Servers läuft voll
  • "server reached max_children"

Prüfen ob PHP-FPM Prozess läuft

Das Beispiel zeigt die PHP-FPM Prozesse und für welche pool Konfiguration / User diese ist, in dem Falle zu sehen "web1" da unter ISPConfig der erste angelegt Host "web1" ist.
ps aux | grep fpm

PHP-FPM Konfiguration anpassen

In diesem Beispiel hier zeige ich euch wie Ihr die Konfiguration anpasst anhand einer ISPConfig Standard Installation mit einer angelegten Webseite. Dazu bearbeiten wir die Datei:

nano /etc/php/7.0/fpm/pool.d/web1.conf

Der Inhalt der Datei sieht dann so aus (kann je nach Installation abweichen):

[web1]

listen = /var/lib/php7.0-fpm/web1.sock
listen.owner = web1
listen.group = www-data
listen.mode = 0660

user = web1
group = www-data

pm = dynamic
pm.max_children = 50
pm.start_servers = 12
pm.min_spare_servers = 8
pm.max_spare_servers = 24
pm.max_requests = 1000

....
....

Ich werde jetzt die wichtigsten Einstellung im Detail erklären und euch gegebenenfalls Hinweise dazu geben. Aber fangen wir direkt an mit der wohl wichtigsten Einstellung "pm.max_children".

Wichtigste PHP-FPM Einstellungen einfach erklärt

  • pm (string)
    • es gibt 3 mögliche Einstellungen, dynamic ist meistens die beste Wahl
      • static - Anzahl der Kindprozesse ist fest (pm.max_children)
      • ondemand - Kindprozess wird erst erstellt wenn er benötigt wird (pm.start_servers)
      • dynamic - dynamische Einstellung der Kindprozesse (benötigt folgenden Einstellungen: pm.max_children, pm.start_servers, pm.min_spare_servers, pm.max_spare_servers)
  • pm.max_children (int)
    • Anzahl der Kindprozesse die erstellt werden wenn pm = static oder die maximale Anzahl der Kindprozesse wenn pm = dynamic. Einstellung ist notwendig!
  • pm.start_servers (int)
    • Anzahl an Kindprozessen, die beim Start erstellt werden. Wird nur verwendet, wenn pm auf dynamic gesetzt ist. Standardwert: min_spare_servers + (max_spare_servers - min_spare_servers) / 2.
  • pm.min_spare_servers (int)
    • gewünschte Mindestanzahl an Prozessen. Wird nur genutzt, wenn pm auf dynamic gesetzt ist. Zwingend notwendig!
  • pm.max_spare_servers (int)
    • gewünschte Maximalanzahl an Prozessen. Wird nur genutzt, wenn pm auf dynamic gesetzt ist. Zwingend notwendig!
  • pm.max_requests (int)
    • Anzahl der Requests bis der FPM Prozess neustartet, hilft Memory Leaks in einigen PHP Libs zu fixen
Noch viele weitere und detailliertere Beschreibungen könnt Ihr in der Dokumentation von PHP finden.

Optimalen Wert für "pm.max_children" bestimmen

Um den perfekten Wert für pm.max_children zu finden muss man zuerst herausfinden wieviel Speicher ein FPM Prozess mit der aktuellen Anwendung verbraucht. Dazu können wir auf 2 verschiedenen Befehle zurück greifen.

ps -ylC php-fpm7.0 --sort:rss

Das sollte dann in etwa so bei euch aussehen:
Für uns von Bedeutung ist die Spalte "RSS" diese gibt den Speicherverbrauch des Prozesses in Kilobyte an. Also wären 43868 rund ~ 43MB für diesen Prozess. Um das ganze etwas zu vereinfachen können wir aber einfach den Befehl ausführen und erhalten den Durchschnitt.

ps --no-headers -o "rss,cmd" -C php-fpm7.0 | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"Mb") }'

// Output
34Mb

Mit diesem Verbrauchswert können wir nun den passenden Wert für pm.max_children berechnen. Dazu nehme ich einfach mal ein Beispiel (einen VPS der 2GB RAM hat).
  • VPS mit 2 GB RAM
    • wir ziehen 256 MB ab da noch andere Dienste auf dem VPS laufen
    • uns bleiben 1792 MB Ram
      • Formel: max_children = Free RAM VPS / RAM pro Prozess
      • max_children = 1792 / 34
      • = 52,7 = ~ 52
Der Ideale Wert für diesen VPS wäre also pm.max_children = 52. Natürlich sollte man diesen Wert nicht einfach Blind übernehmen! Ändert eure Einstellungen und dann testet wie sich euer Server verhält. Wenn Ihr eure Konfiguration angepasst habt, startet Ihr am besten euer FPM neu. Dies könnt Ihr mit folgendem Befehl machen:

sudo /etc/init.d/php7.0-fpm restart

Resümee

Ein optimal Konfigurierter PHP-FPM Service erspart euch auf eurem Produktivsystem eine Menge ärger. Denn niemand möchte einen überlaufenden Speicher oder eine langsame PHP Anwendung nur weil der FPM Dienst falsch konfiguriert ist. Nehmt euch die Zeit ermittelt die optimalen Werte und setzt diese dann um. Oft hilft es auch die Logs regelmäßig zu checken um sehen ob alles ohne Probleme funktioniert und ob nicht doch der Server bald an seine Grenzen kommt. 

Ich hoffe ich konnte dem ein oder anderem das Mysterium PHP-FPM näher bringen und wünsche euch viel Erfolg beim optimieren eurer Einstellungen.

Pokémon GO: Geheimer Trick - Quest "Finde 3 neue Freunde!"

Pokemon Go - Celebi - Freunde Trick

Hi, nur ein ganz kurzer Post um den Massenhaften Freundesspam zu verhindern. Niantec möchte bei der neuen Celebi Quest Reihe in Abschnitt 2, dass man 3 neue Freunde hinzufügt. Da stelllt man sich doch die Frage. Warum? Hier erkläre ich euch jetzt ganz kurz wie Ihr diese Quest in 5 min erledigt ohne einen neuen Freund hinzufügen zu müssen und ohne einen anderen Freund zu verlieren.

Es gibt mehrer Möglichkeiten diese Quest zu lösen:

  • finde und adde drei neue Freunde ...
  • Pro Tipp: lösche einen deiner Freund und füge Ihn erneut hinzu. Keine Panik der Freundeslevel bleibt erhalten und auch sonst ensteht kein Nachteil bei dieser Methode. Das ganze könnt Ihr einfach drei mal machen und schon ist die Quest erledigt ;)

Ich hoffe es hilft dem ein oder anderen. Bei Interesse könnt Ihr noch bei der Celebi Komplettlösung vorbeischauen.

Pokémon GO: Celebi Questreihe - Komplettlösung


Hi, ich hatte ja früher schon einige Beiträge zu Pokemon GO gebracht und wie Ihr wisst bin ich ein Spieler der ersten Stunde. Deshalb gibt es mal wieder neues Futter dazu. Ich versuche hier eine Komplettlösung der Celebi Questreihe aufzustellen. Die jeweiligen Questabschnitte werde ich mit Screenshots abbilden sobald ich den Abschnitt erreiche.

Celebi: Ein Sprung in der Zeit

Celebi: Questreihe 1

Professor Willow: "Trainer, du bist mir eine wirklich große Hilfe bei der Feld- und Spezialforschung gewesen! Ich habe das Gefühl, dass es über diese Welt noch viel mehr zu entdecken gibt, und ich bin froh, dabei auf dich zählen zu können. Ich habe selbst ein paar Experimente durchgeführt und vermute, dass ich kurz vor einer neuen aufregenden Entdeckung über ein weiteres, nur selten gesehenes Mysteriöses Pokémon stehe. Könntest du diese Aufgaben ausführen, während ich meine Untersuchungen abschließe?"

  • Verwende 5 Power-ups bei Pokémon (1.000 EP)
  • Kämpfe 2-mal in einer Arena (1.000 EP)
  • Kämpfe in einem Raid (1.000 EP)
Belohnungen: 10 Pokébälle, 1 Sofort-TM, 1 Super-Brutmaschine

Celebi: Questreihe 2

Professor Willow: "Wow, du und deine Pokémon habt ganz schön Power! Meinen neuesten Daten nach zu urteilen erscheint das Mysteriöse Pokémon, das ich erforsche, allerdings nur zu friedlichen Zeiten. Außerdem scheint es besonders Wälder und üppige Vegetation zu mögen. Könntest du das weiter erforschen, Trainer?"

  • Finde 3 neue Freunde! Geheimer Freunde Trick ;) (1.500 EP)
  • Entwickle ein entwickeltes Pflanzen-Pokémon (1.500 EP)
  • Fange drei Tage in Folge ein Pokémon (1.500 EP)
Belohnungen: 1.500 Sternenstaub, 1 Sonnenstein, 1 Premium-Raid-Pass
Pokemon Go - Celebi - Quest 2

Celebi: Questreihe 3

Professor Willow: "Großartig, Trainer! Ich bin mir sicher, dass wir diesem Mysteriösen Pokémon auf der Spur sind! Vielleicht hilft es, wenn wir ein paar Eier ausbrüten, damit es mehr Freunde hat. Oh, und vielleicht kannst du den Sonnenstein, den du verdient hast, zum Einsatz bringen?"

  • Benutze einen Sonnenstein, um ein Duflor oder ein Sonnkern zu entwickeln (2.000 EP)
  • Erreiche Level 25 (2.000 EP)
  • Brüte 9 Eier aus (2.000 EP)
Belohnungen: Pokémon-Begegnung (Evoli), 1 x King-Stein, 1 x Premium-Raid-Pass

Celebi: Questreihe 4

Professor Willow: "Oh wow, du hast ein Evoli gefangen? Perfektes Timing! Wusstest du, dass sein instabiles Erbmaterial es diesem Pokémon ermöglicht, sich zu verschiedenen Pokémon zu entwickeln? Ich wette, wenn du tagsüber Zeit mit deinem Evoli verbringst, entwickelt es sich zu Psiana – ein Psycho-Pokémon, genau wie das Mysteriöse Pokémon, das ich gerade erforsche!"

  • Entwickle Evoli zur Tageszeit in ein Psiana (2.500 EP)
  • Gehe mit Evoli als Kumpel 10 Kilometer spazieren, um Bonbons zu verdienen (2.500 EP)
  • verschicke 20 Geschenke zu Freunden (2.500 EP)
Belohnungen: 1x Evoli, 2500 Sternenstaub, 1x Metallmantel

Celebi: Questreihe 5

Professor Willow: "Oh wow, du hast ein Evoli gefangen? Perfektes Timing! Moment mal ... hatten wir diese Unterhaltung nicht schon einmal? Ich habe das komische Gefühl, als hätten wir das schon mal erlebt ... Trainer, ich schlage vor, dass du nachts ein wenig Zeit mit diesem Evoli verbringst. Ich glaube, dann würde es eine interessante Entwicklung durchmachen. Ich frage mich, ob dieses komische Gefühl wiederkehren wird ..."

  • Entwickle Evoli zur Nachtzeit in ein Nachtara (3.000 EP)
  • Gehe mit Evoli als Kumpel 10 Kilometer spazieren, um Bonbons zu verdienen (3.000 EP)
  • Tauscht ein Pokémon (3.000 EP)
Belohnungen: 1x Sternenstück, 15x Sananabeere, 1x Upgrade

Celebi: Questreihe 6

Professor Willow: "Trainer, aufregende Neuigkeiten! Das komische Gefühl ist zwar nicht wiedergekehrt, aber ich habe entdeckt, dass das Mysteriöse Pokémon, das wir erforschen, die Fähigkeit hat, durch die Zeit zu reisen! Vielleicht ist das der Grund für das, was hier geschieht ... oder wieder geschieht ... vielleicht ist dieses Pokémon in der Nähe?! Ich schlage vor, dass du im Laufe der nächsten Woche Proben sammelst und mit ein paar Entwicklungsitems experimentierst, um zu sehen, ob dieses Gefühl wiederkehrt. Übrigens, hast du ein paar Sananabeeren für mich? Meine Forschung könnte von mehr Daten über ihre Verwendung profitieren. Wenn du mit welchen zurückkehrst, gebe ich dir diese exotischen Silbernen Sananabeeren!"

  • Pokéstops an 7 aufeinanderfolgenden Tagen besuchen (3.500 EP)
  • 25 Sananabeeren beim Fangen von Pokémon nutzen (3.500 EP)
  • 2 Items nutzen, um Pokémon zu entwickeln (3.500 EP)
Belohnungen: 5 Silberne Sananabeeren, 1 Drachenhaut, 3.500 Sternenstaub

Celebi: Questreihe 7

Professor Willow: "Diese Daten sind äußerst hilfreich! Vielen Dank! Ich werde damit meine Theorie testen. Während du geforscht hast, habe ich mehr über dieses Mysteriöse Pokémon lernen können. Anscheinend wuchern Bäume und Wiesen, wenn es nur in der Nähe ist. Ich glaube, wenn du mehr Pflanzen-Pokémon fängst, wird sich dieses scheue zeitreisende Pokémon zeigen!"

  • 40 Pflanzen- oder Psycho-Pokémon fangen (4000 EP)
  • Goldene Johto-Medaille erhalten (4000 EP)
  • Fabelhaften Curveball werfen (4000 EP)
Belohnungen: Celebi-Begegnung, 1 Lade-TM, 10 Silberne Sananabeeren

Celebi: Questreihe 8

Professor Willow: "Trainer, was für eine fantastische Erfahrung! Man sagt, dass das Erscheinen von Celebi uns allen eine rosige Zukunft verheißt. Du hast es in deiner Forschung weit gebracht und mich inspiriert, noch mehr Pokémon zu erforschen. Bis zum nächsten Mal, Trainer!"

  • Automatisch erfüllt (4000 EP)
  • Automatisch erfüllt (4000 EP)
  • Automatisch erfüllt (4000 EP)
Belohnungen: 20 Celebi-Bonbons, 1 Super-Brutmaschine, 5.500 Sternenstaub

Viel Erfolg Trainer!

Praxistest! Clever Shuttle in Leipzig

"Ruf mal bitte ein Taxi!" Oder heißt es bald "Ruf mal bitte ein Clever Shuttle"?

Heute wird es um die Firma Clever Shuttle gehen, welche ich gestern Nacht irgendwie unfreiwillig einen Test unterzogen habe. Wie es dazu gekommen ist erzähle ich euch gleich. Erst einmal schauen wir uns an was Clever Shuttle überhaupt macht und warum es diese Firma gibt.

Clever Shuttle im Überblick

Kurz ein paar Fakten für euch recherchiert und zusammengetragen, dargestellt in einer übersichtlichen Liste. Toll oder?
  • Bruno, Jan und Slava haben Clever Shuttle gegründet
  • alle drei sind seit der Schule befreundet
  • Gründung 2014
  • ~ 70 Mitarbeiter
  • Hauptzentrale ist in Berlin

Unfreiwillig Ausprobiert

Es kam wie es kommen musste, ich war mit meinem Freunden mal wieder im Kino. Der Film war gut, dass Klima im Kino auf jeden Fall erträglicher als draußen ^^. Jedenfalls war die Zeit nach dem Kino zu knapp bemessen um die Straßenbahn noch zu bekommen, ich versuchte es und rannte. Leider ohne großen Erfolg, die Bahn kam zwei Minuten früher ... 

Mir blieben als zwei Möglichkeiten 30min auf die nächste Straßenbahn zu warten oder mir ein Taxi zu rufen. Auf Option A hatte ich keinen Bock ... Option zwei klang aber erst einmal relativ teuer. Dann viel mir ein das ich mal Werbung von einer Alternative gesehen hatte (Clever Shuttle). Ich installierte mir fix die App auf mein Android Smartphone und registrierte mich. Alles zusammen dauerte keine fünf Minuten und dann konnte es los gehen.

Erschreckend Einfach und Günstig

Um einen Fahrer zu rufen, benötigt man nur ein Start und ein Zielpunkt, diese legt man einfach und schnell auf der Karte in der App fest. Dazu hier mal ein kleines Bild zur besseren Vorstellung.


Als ich mein Start und Ziel festgelegt hatte, zeigte mir die App den Preis an und hier kam die große Überraschung ... es war relativ günstig im Vergleich zu einem herkömmlichen Taxi. Das freut natürlich unseren Geldbeutel. Apropo Geldbeutel, bezahlt habe ich das ganze mit Paypal. Zur Auswahl stand Kreditkarte oder Paypal. Der Fahrer erzählte mir aber das auch Barzahlung möglich gewesen wäre.

Erste Fahrt quasi kostenlos

In dem Wagen der mich dann nach Hause bringen sollte, war bereits eine junge Frau, diese erzählte mir, dass es auch Ihr erstes mal mit Clever Shuttle sei und das Sie über einen Freundescode 10€ Guthaben hat. Wenn ich das früher gewusst hätte wäre meine erste Fahrt quasi kostenlos gewesen da ich im Endeffekt mit 10% Trinkgeld für den Fahrer nur ~9€ bezahlt habe.

10 € Geschenkt - Bonus Code: 7zuy73

Wer nicht den gleichen Fehler machen möchte wie ich, der sollte einfach diesen Bonus Code angeben und 10€ Guthaben abkassieren. Es gibt nichts weiter zu beachten. Code: 7zuy73

Android und iOS App

Die App ist auf den zwei großen Plattformen von Google und Apple verfügbar. Hier die Links zu der App.

Fazit

Mich hat Clever Shuttle hier in Leipzig komplett überzeugt. Meine unfrweillige Testfahrt endete in einer positiven Überraschung. Alles war einfach und hat zuverflässig funktioniert. Der Fahrer war nett und kam innerhalb von 10min. Die eingesetzten Elektrowagen schonen die Umwelt und die nerven der Anwohner da diese sehr sehr leise sind. Ich finde Clever Shuttle ist das Taxi 2.0 und macht bis jetzt alles richtig. Weiter so!