Heim >Backend-Entwicklung >PHP-Tutorial >Einführung in die PHP-FPM-Parameterkonfiguration und Parameteroptimierungsanweisungen unter Linux_php-Kenntnissen

Einführung in die PHP-FPM-Parameterkonfiguration und Parameteroptimierungsanweisungen unter Linux_php-Kenntnissen

韦小宝
韦小宝Original
2017-12-04 11:56:161343Durchsuche

Dieser Artikel erläutert hauptsächlich die detaillierte chinesische Beschreibung einiger wichtiger Parameter von php-fpm unter Linux und stellt detailliert die Parameteroptimierung von php-fpm im Hinblick auf die Leistung vor. Werfen wir einen Blick auf die Leistungsaspekte von php-fpm

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

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

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

log_level = Notice#Error Level sind: Alert (muss sofort bearbeitet werden), Error (Fehlersituation), Warning (Warnsituation). , Notiz (allgemeine wichtige Informationen), Debug (Debugging) Informationen). CGI-Prozesse mit SIGSEGV- oder SIGBUS-Fehlern innerhalb des durch Emergency_restart_interval festgelegten Werts. Wenn Emergency_restart_threshold überschritten wird, 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, kann es in „Nein“ geändert werden. 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, einfach Kommentar
aus dieser Zeile.

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 = www
listen.mode = 0666#Unix-Socket-Einstellungsoptionen, wenn Sie TCP für den Zugriff verwenden, kommentieren Sie einfach hier.

Benutzer = wwwGruppe = 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. Wenn Sie ihn auf „0“ setzen, bedeutet dies „Aus“. 🎜>

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

rlimit_files = 1024 #Legen Sie den rlimit-Grenzwert des Dateiöffnungsdeskriptors fest: 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. definierter Wert .

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

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

catch_workers_output = yes#Stdout und stderr während des laufenden Prozesses in die Hauptfehlerprotokolldatei umleiten. Wenn nicht festgelegt, werden stdout und stderr zugrunde gelegt auf FastCGI Die Regeln werden nach /dev/null umgeleitet.

pm = dynamisch;

gibt an, welche Prozessnummernverwaltungsmethode verwendet wird. dynamisch

gibt an, dass die Anzahl der PHP-FPM-Prozesse dynamisch ist, zunächst die durch pm.start_servers angegebene Anzahl. Wenn mehr Anfragen vorliegen, wird dies automatisch der Fall sein erhöht, um sicherzustellen, dass die Anzahl der inaktiven Prozesse nicht weniger als pm.min_spare_servers beträgt. Wenn die Anzahl der Prozesse groß ist, wird sie auch entsprechend bereinigt, um sicherzustellen, dass die Anzahl der überschüssigen Prozesse nicht mehr als pm.max_spare_servers beträgt

statisch bedeutet, dass die Anzahl der PHP-FPM-Prozesse

statisch

ist. Die Anzahl der Prozesse ist immer die durch pm.max_children angegebene Anzahl und wird nicht erhöht der im statischen Modus gestarteten PHP-FPM-Prozesse

pm.max_children = 300; pm.start_servers = 20

im dynamischen Modus; fpm-Prozesse

pm.min_spare_servers = 5; Minimale Anzahl von PHP-FPM-Prozessen im dynamischen Modus pm.max_spare_servers = 35;

Dynamischer Modus Maximale Anzahl von PHP-FPM Prozesse

Wenn pm statisch ist, ist 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 512M 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, Stresstests 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 steigt schnell an, und der Speicher wird schnell verbraucht und Dann wird die Swap-Partition verbraucht und das System hängt sehr! 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 freigeben kann. 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

Verwandte Empfehlungen:

Detaillierte Erläuterung der PHP-FPM-Prozesspool-Erkundung

Erkundung des PHP-FPM-Prozesspools

Einführung von Lösungen zur Reduzierung von PHP -FPM-Speichernutzung

Das obige ist der detaillierte Inhalt vonEinführung in die PHP-FPM-Parameterkonfiguration und Parameteroptimierungsanweisungen unter Linux_php-Kenntnissen. 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