PHP-FPM-Worker

Der PHP-FPM nimmt alle Anfragen für die PHP-Anwendung entgegen und verteilt diese auf einzelne PHP-Prozesse, auch Worker genannt.

Was ist PHP-FPM?

Der PHP-FPM (Fast Process Manager) nimmt alle Anfragen für die PHP-Anwendung entgegen und verteilt diese auf einzelne PHP-Prozesse, auch Worker genannt. Das ist notwendig, damit Anfragen “parallel” beantwortet werden können. Die Anzahl der PHP-Worker kann konfiguriert werden.
Der FPM kann neue Anfragen nur an Worker-Prozesse übergeben, die im Status “idle”, also aktuell nicht beschäftigt sind. Wenn keine freien Worker-Prozesse verfügbar sind, wartet der FPM, bis der nächste Worker seine Arbeit beendet hat und wieder frei wird oder ein Timeout greift.
Alle Anfragen, die der FPM bearbeitet, erhält dieser vom Webserver. Das bedeutet, dass zu jedem Worker-Prozess eine HTTP-Anfrage existiert und die Beantwortung dieser HTTP-Anfragen durch den Webserver maßgeblich vom FPM abhängig sind.
Nicht gewollt ist also, dass alle PHP-Worker beschäftigt sind und neue HTTP-Anfragen deshalb warten müssen. Gewollt hingegen ist, dass genügend PHP-Worker verfügbar sind und der FPM für jede neue Anfrage freie Worker findet. Gleichzeitig dürfen jedoch die RAM- und CPU-Ressourcen nicht überlastet werden. Letzteres ist der Grund, warum es eine maximale Anzahl Worker geben muss.

Um die Worker zu starten, gibt es die Wahl zwischen verschiedenen möglichen PHP-Schedulern:

  • Der “Static”-Scheduler startet eine konstante Anzahl von PHP-Prozessen und sorgt dafür, dass diese dauerhaft laufen. Dieser Scheduler wird nur sehr rudimentär gepflegt und protokolliert beispielsweise nicht, wann die Worker ausgelastet sind. Aus diesem Grund bieten wir diesen nicht an.
  • Der “OnDemand”-Scheduler startet Worker sobald eine Anfrage ankommt und beendet den Worker sehr schnell wieder, wenn dieser nicht mehr benötigt wird. Dies führt zu einem gewissen Overhead, wenn häufige Anfragen kommen, sorgt allerdings auch dafür, dass PHP nur den notwendigen Arbeitsspeicher belegt. Der “OnDemand”-Scheduler ist besonders für Webseiten mit niedrigen Besucherzahlen gut geeignet.
  • Der “Dynamic”-Scheduler sorgt im Gegensatz zum “OnDemand”-Scheduler dafür, dass immer eine gewisse Menge freier Worker verfügbar sind, sodass Anfragen ohne Verzögerung beantwortet werden können.
    Der “Dynamic”-Scheduler ist besonders für Webseiten mit mittlerem und hohem Traffic geeignet.

Einstellungen

Die Einstellungen von PHP-FPM sind abhängig von der Webanwendung und den erwarteten Besucherinnen und Besuchern.

Wenn einzelne PHP-Requests schnell ausgeführt werden können und wenig RAM benötigen, ist es bei gleichen Ressourcen möglich, mehr PHP-Worker zu verwenden als Seiten, die komplexe Berechnungen innerhalb der PHP-Prozesse machen. Es sollte sichergestellt werden, dass insbesondere ausreichend Arbeitsspeicher für alle PHP-Worker verfügbar ist. So benötigen komplexe Shopsysteme wie Magento oder Shopware mehr Arbeitsspeicher als einfache CMS-Systeme wie Wordpress oder Typo3. Zudem muss beachtet werden, dass einige Anwendungen auf vielen Ajax-Requests basieren, die häufig nur wenige Ressourcen belegen.

Sie sollten daher zum einen prüfen, ob ausreichend freier Arbeitsspeicher im Betrieb verfügbar ist, beispielsweise über das Hardware-Monitoring. Hierfür bietet maxcluster eine Darstellung im Monitoring Center.
Zum anderen sollte kontrolliert werden, dass keine Prozesse vom sogenannten OOM-Killer des Betriebssystems beendet werden müssen. Den Eintrag finden Sie in der Datei /var/log/kern.log.

Außerdem muss geprüft werden, ob ausreichend Worker zur Verfügung stehen. Wenn die Worker voll waren, sieht man dies an einem Eintrag in der Log-Datei von php-fpm. Wir empfehlen Ihnen insbesondere, vor Marketingaktionen zu prüfen, ob die PHP-Worker ausreichend groß sind.

Für Ihre Prüfung können Sie als Basis für die ungefähre Einordnung die Daten der folgenden Tabelle nutzen:

 

Bei Fragen steht Ihnen unser Support telefonisch unter 05251/414130 oder per E-Mail an support@maxcluster.de zur Verfügung.

Veröffentlicht am 08.03.2024