Heim  >  Artikel  >  Backend-Entwicklung  >  Einführung in die PHP-FPM-Parameterkonfiguration und detaillierte Erläuterung der Parameteroptimierung unter Linux

Einführung in die PHP-FPM-Parameterkonfiguration und detaillierte Erläuterung der Parameteroptimierung unter Linux

jacklove
jackloveOriginal
2018-07-07 17:53:232057Durchsuche

Dieser Artikel erklärt hauptsächlich die chinesische detaillierte Beschreibung einiger wichtiger Parameter von PHP-FPM unter Linux und stellt detailliert die Parameteroptimierung von PHP-FPM im Hinblick auf die Leistung vor

php -fpm Detaillierte Erläuterung wichtiger Parameter von .conf

pid = run/php-fpm.pid
#pid-Einstellung, der Standardwert ist var/run /php im Installationsverzeichnis -fpm.pid wird empfohlen,

error_log = log/php-fpm.log
# Fehlerprotokoll zu aktivieren, der Standardwert ist var/log /php-fpm.log im Installationsverzeichnis

log_level = Notice
#Error Level sind: Alert (muss sofort bearbeitet werden), Error (Fehlersituation), Warnung (Warnsituation), Hinweis (allgemeine wichtige Informationen), Debug (Debugging-Informationen). dass ein SIGSEGV- oder SIGBUS-Fehler innerhalb des durch Emergency_restart_interval festgelegten Werts auftritt. Wenn die Anzahl der PHP-CGI-Prozesse Emergency_Restart_Threshold überschreitet, wird PHP-FPM ordnungsgemäß neu gestartet. Diese beiden Optionen bleiben im Allgemeinen auf ihren Standardwerten.

process_control_timeout = 0
#Legen Sie das Zeitlimit fest, damit der untergeordnete Prozess das Wiederverwendungssignal des Hauptprozesses akzeptiert. Verfügbare Einheiten: s (Sekunden), m (Minuten), h (Stunden). ), Oder d (Tage) Standardeinheit: s (Sekunden). , wenn es zum Debuggen dient, ändern Sie es in „Nein“. In FPM ist es möglich, mehrere Prozesspools mit unterschiedlichen Einstellungen auszuführen. Diese Einstellungen können für jeden Prozesspool individuell festgelegt werden.

listen = 127.0.0.1:9000#fpm Überwachungsport, die von PHP in Nginx verarbeitete Adresse, im Allgemeinen ist der Standardwert ausreichend. Verfügbare Formate sind: „ip:port“, „port“, „/path/to/unix/socket“. Jeder Prozesspool muss festgelegt werden.

listen.backlog = -1#Backlog-Nummer, -1 bedeutet unbegrenzt, wird vom Betriebssystem bestimmt, kommentieren Sie diese Zeile einfach aus.

listen.allowed_clients = 127.0.0.1#Zugriff auf die IP des FastCGI-Prozesses zulassen, um die IP nicht einzuschränken Hosts können auch auf diesen FPM-Prozess zugreifen. Listen sollten auf eine lokale IP eingestellt sein, auf die zugegriffen werden kann. Der Standardwert ist beliebig. Jede Adresse wird durch ein Komma getrennt. Wenn sie nicht gesetzt oder leer ist, darf jeder Server eine Verbindung anfordern

listen.owner = wwwlisten.group = wwwlisten.mode = 0666

#Unix-Socket-Einstellungsoptionen, wenn Sie TCP für den Zugriff verwenden, kommentieren Sie einfach hier.

Benutzer = www
Gruppe = www

# Konto und Gruppe zum Starten des Prozesses

pm = dynamisch

# Für dedizierte Server kann pm auf statisch gesetzt werden.

#So steuern Sie den untergeordneten Prozess. Die Optionen sind statisch und dynamisch. Wenn „Statisch“ ausgewählt ist, wird durch pm.max_children eine feste Anzahl an untergeordneten Prozessen angegeben. Wenn dynamisch ausgewählt ist, wird dies durch die folgenden Parameter bestimmt:

pm.max_children #,
Maximale Anzahl untergeordneter Prozesse

pm.start_servers #

, Anzahl der Prozesse bei Startup

pm.min_spare_servers #, um die Mindestanzahl an Leerlaufprozessen sicherzustellen. Wenn der Leerlaufprozess kleiner als dieser Wert ist, erstellen Sie einen neuen untergeordneten Prozess

pm.max_spare_servers #
, um die Anzahl der Leerlaufprozesse sicherzustellen Maximalwert, wenn der Leerlaufprozess größer als dieser Wert ist, wird dieser bereinigt
pm.max_requests = 1000#Set Die Anzahl der verarbeiteten Anforderungen, bevor jeder untergeordnete Prozess neu gestartet wird. Dies ist sehr nützlich für Module von Drittanbietern. Wenn die Anforderung auf „0“ gesetzt ist, entspricht sie der Umgebungsvariable PHP_FCGI_MAX_REQUESTS .
pm.status_path = /status
#Die URL der FPM-Statusseite kann nicht aufgerufen werden Verwenden Sie

ping.path = /ping#Die Ping-URL der FPM-Überwachungsseite. Wenn sie nicht festgelegt ist, kann auf diese Seite nicht zugegriffen werden Erkennen Sie extern, ob FPM aktiv ist und auf Anfragen antworten kann. Bitte beachten Sie, dass es mit einem Schrägstrich (/) beginnen muss.

ping.response = pong# Wird verwendet, um die Antwort auf die Ping-Anfrage zu definieren. Der zurückgegebene Text/einfache Formattext ist HTTP 200. Standardwert: pong.

request_terminate_timeout = 0#Legen Sie die Timeout-Abbruchzeit für eine einzelne Anfrage fest. Diese Option kann für Skripte nützlich sein, bei denen die „max_execution_time“ in der php.ini-Einstellung die Ausführung von Skripten nicht abbricht Aus bestimmten Gründen bedeutet die Einstellung „0“ „Aus“. Sie können versuchen, diese Option zu ändern, wenn 502-Fehler häufig auftreten.

request_slowlog_timeout = 10s#Wenn eine Anfrage den Timeout-Zeitraum festlegt, werden die entsprechenden PHP-Call-Stack-Informationen vollständig in das langsame Protokoll geschrieben. Auf „0“ gesetzt bedeutet „Aus“. '

slowlog = log/$pool.log.slow
#Langsames Anforderungsprotokoll, verwendet mit request_slowlog_timeout

rlimit_files = 1024
#Set der rlimit-Grenzwert des Dateiöffnungsdeskriptors: Der systemdefinierte Wert des Standardöffnungshandles ist 1024, der mit ulimit -n angezeigt und mit ulimit -n 2048 geändert werden kann.

rlimit_core = 0
#Legen Sie den maximalen Kern-rlimit-Grenzwert fest. Verfügbare Werte: „unbegrenzt“, 0 oder positive Ganzzahl. Standardwert: systemdefinierter Wert.

chroot =
#Chroot-Verzeichnis beim Start. Das definierte Verzeichnis muss ein absoluter Pfad sein. Wenn nicht festgelegt, wird chroot nicht verwendet.

chdir =
#Legen Sie das Startverzeichnis fest, in das beim Start automatisch verwiesen wird. Das definierte Verzeichnis muss ein absoluter Pfad sein: aktuelles Verzeichnis oder /directory (beim Chrooten)

catch_workers_output = ja
#Umleiten von stdout und stderr während des laufenden Prozesses zur Hauptfehlerprotokolldatei. Wenn nicht festgelegt, werden stdout und stderr gemäß den FastCGI-Standards umgeleitet Wert: leer.

php-fpm-Parameteroptimierung

pm = dynamisch; 🎜>Gibt an, welche Prozessnummernverwaltungsmethode verwendet wird


dynamisch

Gibt an, dass die Anzahl der PHP-FPM-Prozesse dynamisch ist, beginnend mit der durch pm.start_servers angegebenen Anzahl Wenn viele Anfragen vorliegen, wird die Anzahl der inaktiven Prozesse automatisch erhöht. Wenn die Anzahl der Prozesse groß ist, wird die Anzahl der redundanten Prozesse entsprechend bereinigt ist nicht mehr als pm.max_spare_servers

statisch

bedeutet, dass die Anzahl der PHP-FPM-Prozesse statisch ist. Die Anzahl der Prozesse ist die von pm.max_children angegebene Anzahl von Anfang bis Ende wird nicht mehr erhöht oder verringert.

pm.max_children = 300;

Anzahl der im statischen Modus gestarteten PHP-FPM-Prozesse pm.start_servers = 20; Anzahl der gestarteten PHP-FPM-Prozesse im dynamischen Modus
pm.min_spare_servers = 5; Die Mindestanzahl der PHP-FPM-Prozesse im dynamischen Modus
pm.max_spare_servers = 35;Die maximale Anzahl von PHP-FPM-Prozessen im dynamischen Modus
Wenn pm statisch ist, dann ist tatsächlich nur der Parameter pm.max_children wirksam. Das System öffnet eine festgelegte Anzahl von PHP-FPM-Prozessen

Wenn pm dynamisch ist, ist der Parameter pm.max_children ungültig und die nächsten drei Parameter werden wirksam. Das System startet die php-fpm-Prozesse von pm.start_servers, wenn php-fpm ausgeführt wird, und passt dann die Anzahl der php-fpm-Prozesse zwischen pm.min_spare_servers und pm.max_spare_servers entsprechend den Anforderungen des Systems dynamisch an

Welche PM-Methode ist dann für unseren Server besser? Tatsächlich weist das laufende PHP-Programm wie Apache nach der Ausführung mehr oder weniger Speicherverluste auf. Dies ist auch der Grund, warum ein PHP-FPM-Prozess zu Beginn nur etwa 3 MB Speicher belegt und nach einiger Zeit auf 20 bis 30 MB ansteigt.

Für Server mit großem Speicher (z. B. 8G oder höher) ist es tatsächlich angemessener, statisches max_children anzugeben, da dies keine zusätzliche Prozessnummernsteuerung erfordert und die Effizienz verbessert. Da ein häufiger Wechsel des PHP-FPM-Prozesses zu Verzögerungen führt, ist es besser, die statische Funktion zu aktivieren, wenn der Speicher groß genug ist. Die Menge kann auch basierend auf Speicher/30 MB ermittelt werden. Beispielsweise kann 8 GB Speicher auf 100 eingestellt werden, dann kann der von PHP-FPM verbrauchte Speicher auf 2G-3G gesteuert werden. Wenn der Speicher etwas kleiner ist, z. B. 1 GB, ist die Angabe einer statischen Anzahl von Prozessen der Stabilität des Servers förderlicher. Dadurch kann sichergestellt werden, dass PHP-FPM nur genügend Speicher erhält und anderen Anwendungen eine kleine Menge Speicher zur Verwendung zuweist, wodurch das System reibungsloser läuft.

Bei einem Server mit kleinem Speicher, z. B. einem VPS mit 256 MB Speicher, verbrauchen 10 PHP-CGI-Prozesse 200 MB Speicher, selbst wenn die Berechnung auf 20 MB Speicher basiert, und der Systemabsturz sollte sehr schwerwiegend sein ernst. Es ist normal. Daher sollten Sie versuchen, die Anzahl der PHP-FPM-Prozesse so weit wie möglich zu kontrollieren. Nachdem Sie den von anderen Anwendungen belegten Speicher grob geklärt haben, wird das System stabiler, indem Sie ihm eine statische kleine Zahl zuweisen. Oder verwenden Sie den dynamischen Modus, da der dynamische Modus redundante Prozesse beendet und einen Teil des Speichers recyceln und freigeben kann. Daher wird empfohlen, ihn auf Servern oder VPS mit weniger Speicher zu verwenden. Die spezifische Höchstmenge wird basierend auf Speicher/20 MB ermittelt. Für einen 512-MB-VPS wird beispielsweise empfohlen, pm.max_spare_servers auf 20 zu setzen. Für pm.min_spare_servers wird empfohlen, ihn entsprechend der Auslastung des Servers festzulegen. Ein geeigneterer Wert liegt zwischen 5 und 10.

Auf einem Server mit 4G-Speicher reichen 200 (für meine 1G-Testmaschine ist 64 das Beste. Es wird empfohlen, einen Stresstest zu verwenden, um den besten Wert zu erhalten)

pm. max_requests = 10240;

Das größte Problem während des Nginx-PHP-FPM-Konfigurationsprozesses ist ein interner Verlust: Die Auslastung des Servers ist nicht groß, aber die Speichernutzung nimmt schnell zu und verbraucht dann schnell die Swap-Partition Das System hängt sich schnell auf! Tatsächlich weist PHP-CGI laut der offiziellen Einführung keine Speicherlecks auf. Nach Abschluss jeder Anforderung fordert PHP-CGI den Speicher zurück, gibt ihn jedoch nicht an das Betriebssystem frei von php-cgi belegt sein.

Die offizielle Lösung besteht darin, den Wert von PHP_FCGI_MAX_REQUESTS zu verringern. Wenn Sie php-fpm verwenden, ist die entsprechende php-fpm.conf max_requests. Dieser Wert gibt an, wie viele Anfragen gesendet werden, bevor der Thread neu gestartet wird . Wir müssen diesen Wert entsprechend senken, damit php-fpm automatisch Speicher freigibt. Er ist nicht 51200 und so weiter. Tatsächlich gibt es einen anderen Wert, der damit zusammenhängt php-fpm Wie viele Prozesse werden erstellt, sodass der tatsächliche Speicherverbrauch bei jeder Anforderung max_children*max_requests*memory beträgt. Auf dieser Grundlage können wir den Speicherverbrauch abschätzen, sodass kein Skript zum Beenden geschrieben werden muss.

request_terminate_timeout = 30;

Maximale Ausführungszeit, die auch in php.ini konfiguriert werden kann (max_execution_time)

request_slowlog_timeout = 2 ; Langsames Protokoll aktivieren
slowlog = log/$pool.log.slow; Langsamer Protokollpfad

rlimit_files = 1024; php-fpm Einschränkungen für offene Dateideskriptoren

Die Parameter von php-fpm.conf sind klar angegeben und Sie sollten sie sich merken können, solange Sie sie ein paar Mal lesen. Was den Leistungsplan php-fpm betrifft sollte anhand der tatsächlichen Situation ermittelt und mehrmals getestet werden. Erhalten Sie die beste Konfigurationslösung.

Artikel, die Sie interessieren könnten:

Detaillierte Schritte für Daten Migration und Datenausfüllung in Laravel

Erklärung des Unterschieds zwischen PHP-Schließung zum Erhalten externer Variablen und globaler Schlüsselwortdeklaration von Variablen

Ausführliche Erläuterung, wie Sie Anyproxy verwenden können, um die Effizienz der Artikelsammlung in öffentlichen Konten zu verbessern

Das obige ist der detaillierte Inhalt vonEinführung in die PHP-FPM-Parameterkonfiguration und detaillierte Erläuterung der Parameteroptimierung unter Linux. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn