Eine unbearbeitete Version dieses Artikels wurde ursprünglich auf veröffentlicht
Ich erkläre Ihnen kurz und bündig, wie Sie PHP-FPM am besten konfigurieren, um den Durchsatz zu erhöhen, die Latenz zu reduzieren und CPU und Speicher konsistenter zu nutzen. Standardmäßig lautet die PM-Zeile (Prozessmanager) in PHP-FPM dynamisch, und wenn Sie nicht über genügend Speicher verfügen, ist es besser, es zu installieren auf Nachfrage. Vergleichen wir zwei Steuerungsoptionen basierend auf der php.net-Dokumentation und sehen wir, wie sich mein Favorit davon unterscheidet statisch PM für hohes Verkehrsaufkommen:
pm = dynamisch — Die Anzahl der untergeordneten Prozesse wird dynamisch basierend auf den folgenden Anweisungen konfiguriert: pm.max_children, pm.start_servers, pm.min_spare_servers, pm.max_spare_servers.
pm = auf Anfrage - Prozesse werden bei Bedarf erstellt (im Gegensatz zur dynamischen Erstellung, wenn pm.start_servers beim Start des Dienstes gestartet werden).
pm = statisch — Die Anzahl der untergeordneten Prozesse ist festgelegt und wird durch den Parameter angegeben pm.max_children.
Einzelheiten finden Sie unter
Ähnlichkeiten zwischen dem PHP-FPM-Prozessmanager und dem CPU-Frequenzcontroller
Das mag vielleicht nicht zum Thema gehören, aber ich werde es mit dem Thema PHP-FPM-Konfiguration verknüpfen. Wer hat nicht mindestens einmal eine Prozessorverlangsamung erlebt – auf einem Laptop, einer virtuellen Maschine oder einem dedizierten Server? Erinnern Sie sich an die CPU-Frequenzskalierung? Diese Optionen sind verfügbar für nix und Windows können die Systemleistung und Reaktionsfähigkeit verbessern, indem sie die Prozessordrosselungseinstellung von ändern auf Nachfrage auf Leistung*. Vergleichen wir dieses Mal die Beschreibungen und schauen uns die Gemeinsamkeiten an:
Governor=ondemand — dynamische Skalierung der Prozessorfrequenz abhängig von der aktuellen Auslastung. Springt schnell auf die maximale Frequenz und reduziert sie dann, wenn die Inaktivitätsperioden zunehmen.
Gouverneur=konservativ= dynamische Frequenzskalierung abhängig von der aktuellen Last. Erhöht und verringert die Frequenz reibungsloser als bei Bedarf.
Gouverneur = Leistung — Die Frequenz ist immer maximal.
Einzelheiten finden Sie unter
Sehen Sie die Ähnlichkeiten? Ich wollte diesen Vergleich zeigen, um Sie davon zu überzeugen, dass er am besten zu verwenden ist Uhr statisch für PHP-FPM.
Für den Prozessorreglerparameter Leistung trägt dazu bei, die Leistung sicher zu steigern, da sie fast ausschließlich vom CPU-Limit des Servers abhängt. Hinzu kommen natürlich noch Faktoren wie Temperatur, Akkuladung (im Laptop) und andere Nebenwirkungen, wenn der Prozessor ständig auf 100 % läuft. Die Leistungseinstellung sorgt für die schnellste Prozessorleistung. Lesen Sie zum Beispiel darüber
Verwenden Sie pm static, um maximale Serverleistung zu erzielen
PHP-FPM-Option Uhr statisch hängt weitgehend vom freien Speicher auf dem Server ab. Wenn der Speicher knapp ist, ist es besser zu wählen auf Nachfrage oder dynamisch. Wenn Sie jedoch über Speicher verfügen, können Sie den Overhead des PHP-Prozessmanagers vermeiden, indem Sie pm festlegen statisch bis zur maximalen Serverkapazität. Mit anderen Worten: Wenn alles gut berechnet ist, müssen Sie es feststellen pm.static auf das maximale Volumen der ausführbaren PHP-FPM-Prozesse, ohne Probleme mit wenig Arbeitsspeicher oder Cache zu verursachen. Aber nicht so hoch, dass es die Prozessoren überlastet und eine Menge PHP-FPM-Operationen ansammelt, die darauf warten, ausgeführt zu werden.
Im Screenshot oben hat der Server pm = static und pm.max_children = 100, und das nimmt etwa 10 GB der verfügbaren 32 ein. Achten Sie auf die hervorgehobenen Spalten, hier ist alles klar. In diesem Screenshot gab es ungefähr 200 aktive Nutzer (mehr als 60 Sekunden) in Google Analytics. Auf dieser Ebene befinden sich etwa 70 % der untergeordneten PHP-FPM-Prozesse noch im Leerlauf. Dies bedeutet, dass PHP-FPM unabhängig vom aktuellen Datenverkehr immer auf die maximale Menge an Serverressourcen eingestellt ist. Ein Leerlaufprozess wartet auf Verkehrsspitzen und reagiert sofort. Sie müssen nicht warten bis pm erstellt untergeordnete Prozesse und beendet sie nach Ablauf des Zeitraums pm.process_idle_timeout. Ich habe den Wert auf sehr hoch eingestellt pm.max_requestsweil dies ein funktionierender Server ohne Speicherlecks in PHP ist. Sie können installieren pm.max_requests = 0 mit static, wenn Sie mit bestehenden und zukünftigen PHP-Skripten vollkommen vertraut sind. Es ist jedoch besser, die Skripte im Laufe der Zeit erneut auszuführen. Stellen Sie eine große Anzahl an Anfragen ein, da wir unnötige PN-Kosten vermeiden möchten. Zumindest zum Beispiel pm.max_requests = 1000 - je nach Menge pm.max_children und die Anzahl der Anfragen pro Sekunde.
Der Screenshot zeigt den Befehl
top -bn1 | grep php-fpm
Wann sollte man PM OnDemand und Dynamic verwenden?
Wenn Sie pm verwenden dynamisch, treten Fehler wie dieser auf:
WARNING: [pool xxxx] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 4 idle, and 59 total children
Versuchen Sie, den Parameter zu ändern. Der Fehler wird nicht behoben
PM dynamisch und insbesondere auf Nachfrage kann nützlich sein, wenn Sie über mehrere PHP-FPM-Pools verfügen. Sie hosten beispielsweise mehrere cPanel-Konten oder mehrere Websites in verschiedenen Pools. Ich habe einen Server mit beispielsweise mehr als 100 cpanel-Konten und etwa 200 Domänen, und pm.static oder sogar dynamisch würden mich nicht retten. Alles, was Sie hier brauchen, ist auf NachfrageImmerhin erhalten mehr als zwei Drittel der Websites wenig oder gar keinen Traffic, und das mit auf Nachfrage Alle untergeordneten Prozesse fallen aus, was uns viel Speicher spart! Glücklicherweise haben die cPanel-Entwickler dies bemerkt und den Wert auf Standard gesetzt auf Nachfrage. Zuvor war die Standardeinstellung dynamisch, PHP-FPM war überhaupt nicht für ausgelastete Shared-Server geeignet. Viele haben verwendet suPHP, weil Uhr dynamisch verbrauchte Speicher, selbst bei inaktiven Pools und cPanel-PHP-FPM-Konten. Wenn der Datenverkehr gut ist, werden Sie höchstwahrscheinlich nicht auf einem Server mit einer großen Anzahl von PHP-FPM-Pools gehostet (Shared Hosting).
Abschluss
Wenn Sie PHP-FPM verwenden und Ihr Datenverkehr stark ist, wenden Sie sich an die Prozessmanager auf Nachfrage и dynamisch Für PHP-FPM ist der Durchsatz aufgrund des inhärenten Overheads begrenzt. Verstehen Sie Ihr System und konfigurieren Sie PHP-FPM-Prozesse entsprechend der maximalen Serverkapazität. Erstes Set pm.max_children Abhängig von der maximalen PM-Nutzung dynamisch oder auf Nachfrage, und erhöhen Sie diesen Wert dann auf ein Niveau, bei dem Speicher und Prozessor ohne Überlastung arbeiten. Das werden Sie merken Uhr statischDa sich alles im Arbeitsspeicher befindet, führen Verkehrsspitzen mit der Zeit zu weniger CPU-Spitzen und die durchschnittliche Server- und CPU-Auslastung gleicht sich aus. Die durchschnittliche PHP-FPM-Prozessgröße hängt vom Webserver ab und erfordert eine manuelle Konfiguration, weshalb dies bei automatisierteren Prozessmanagern der Fall ist dynamisch и auf Nachfrage - bekannter. Ich hoffe, der Artikel war nützlich.
UPD Benchmark-Diagramm hinzugefügt
Source: habr.com