Beziehung zwischen PHP-FPM-Einstellungen und mpm_worker (Apache)

Beziehung zwischen PHP-FPM-Einstellungen und mpm_worker (Apache)

Ich habe eine Site, auf der Magento mit dem folgenden Setup läuft:

  • Apache 2.4 mit mpm_worker
  • PHP-FPM
  • Gesamt-RAM im Server: 14 GB (10 GB für Apache/PHP verfügbar)

Jeder PHP-FPM-Prozess verbraucht ungefähr 80 MB RAM.

Ich möchte die Einstellungen für PHP-FPM und mpm_worker optimieren. Beim Lesen der Dokumentation bin ich etwas verwirrt über die Beziehung zwischen den Optionen in PHP-FPM und mpm_worker.

PHP-FPM verfügt beispielsweise über die Konfigurationen , pm.min_spare_servers, und . Ich verstehe pm.max_spare_servers, was diese Optionen in Bezug auf PHP-FPM bedeuten.pm.start_serversmax_children

Allerdings hat mpm_worker die folgenden Konfigurationen: MinSpareThreads, MaxSpareThreads, StartServersund ThreadLimit. Auch hier verstehe ich, was sie tun, isoliert auf mpm_worker.

Meine Frage ist: Wie hängen diese Konfigurationen miteinander zusammen? Angenommen, ich setze StartServers=2und ThreadsPerChild=25. Damit hätte ich für Apache/mpm_worker zunächst 50 Threads. Wenn ich dann setze pm.start_servers = 50, erzeugt PHP-FPM zunächst 50 Prozesse.

Welche Beziehung besteht also zwischen diesen 50 „Apache“-Threads und 50 „PHP-FPM“-Prozessen? Nutzt jeder Apache-Thread einen PHP-FPM-Prozess?

Ich hoffe, dass jemand dazu einen Einblick geben kann.

Danke!

Antwort1

Apache bearbeitet die Anfragen der Clients unter Verwendung der untergeordneten Threads, ruft PHP-FPM jedoch nur für PHP-Dateien auf – Bilder, CSS und JS sollten direkt von Apache bereitgestellt werden und somit keinen PHP-FPM-Thread verbrauchen.

PHP-FPM hat mehrere Threads ohne untergeordnete Threads – jeder Thread bedient eine Anfrage von Apache.

Soweit ich weiß, sollten mehrere Anfragen vom selben Client (Laden der Seite plus Bilder, CSS und JS) mehrere Threads verbrauchen, wenn Sie KeepAlive in Apache nicht festgelegt haben.Siehe diesen Linkfür weitere Informationen zu KeepAlive.

Ich habe vor kurzem selbst einen Apache-Server optimiert und festgestellt, dass es bei Verwendung mehrerer Kerne besser ist, die Anzahl der untergeordneten Elemente pro Thread zu erhöhen.

Antwort2

Die Beziehung wird dynamisch abgebildet. Es sind separate Prozesse, die auch auf separaten Servern laufen können, so dass Sie viele Konfigurationsmöglichkeiten haben.

Apache-Prozesse/-Threads handhaben die ersten Verbindungen, die dann PHP-FPM-Prozesse verwenden, um PHP-Dateien für die Rückgabe von Anforderungen zu analysieren.

Es gibt hier viele Variablen, die Ihnen bei der Konfiguration helfen, aber konfigurieren Sie Apache im Allgemeinen so, dass es genügend Threads hat, um Anfragen in Echtzeit zu verarbeiten, und konfigurieren Sie php-fpm so, dass Ihre PHP-Skripte/-Websites über genügend Speicher zum Ausführen verfügen. Bei den verschiedenen möglichen Caching-Optionen kann dies nur durch Benchmarking eines laufenden Systems entschieden werden.

verwandte Informationen