php-fpm.conf Wichtige Parameter werden ausführlich erklärt
pid = run/php-fpm.pid #pid设置 wird empfohlen, var/run/php-fpm.pid standardmäßig im Installationsverzeichnis zu aktivieren
error_log = Log/php-fpm.log #错误日志 ist der Standard var/log/php-fpm.log im Installationsverzeichnis
log_level = Hinweis #错误级别. Die verfügbaren Level sind: Warnung, Fehler, Warnung, Hinweis, Debugging. Standard: Hinweis.
emergency_restart_threshold = 60 emergency_restart_interval = 60er # zeigt an, dass wenn die Anzahl der php-CGI-Prozesse mit SIGSEGV- oder SIGBUS-Fehlern emergency_restart_threshold innerhalb des emergency_restart_interval-Werts übersteigt, php-fpm reibungslos neu gestartet wird. Diese beiden Optionen bleiben im Allgemeinen die Standardoptionen.
process_control_timeout = 0 #设置子进程接受主进程复用信号的超时时间. Verfügbare Einheiten: s (Sekunden), m (Minuten), h (Stunden) oder d (Tage) Standardeinheiten: s (Sekunden). Standard: 0.
daemonize = ja #后台执行fpm ist der Standardwert ja, und wenn du debuggen willst, kannst du ihn auf nein ändern. Im FPM können verschiedene Einstellungen verwendet werden, um mehrere Prozesspools auszuführen. Diese Einstellungen können für jeden Prozesspool einzeln eingestellt werden.
Hören = 127.0.0.1:9000 #fpm监听端口, also die von PHP in nginx verarbeitete Adresse, ist im Allgemeinen der Standardwert. Die verfügbaren Formate sind: 'ip:port', 'port', '/path/to/unix/socket'. Jeder Prozesspool muss eingerichtet werden.
listen.backlog = -1 #backlog数, -1 bedeutet unbegrenzt, bestimmt vom Betriebssystem, kommentiere einfach diese Zeile. Quelle: http://www.3gyou.cc/?p=41
listen.allowed_clients = 127.0.0.1 #允许访问FastCGI进程的IP setze jede so, dass die IP nicht eingeschränkt ist; wenn du die nginx anderer Hosts für diesen FPM-Prozess einsetzen willst, musst du die IP-Adresse festlegen, die auf Kosten des Zuhörens zugänglich ist. Der Standardwert ist beliebig. Jede Adresse ist durch ein Komma getrennt. Wenn sie nicht gesetzt ist oder leer ist, darf jeder Server eine Verbindung anfordern
listen.owner = www listen.group = www listen.mode = 0666 #unix Socket-Einstellung: Wenn du TCP zum Zugriff nutzt, kannst du hier kommentieren.
Nutzer = www Gruppe = www #启动进程的帐户和组
pm = dynamisch #对于专用服务器, pm kann auf statisch gestellt werden. #如何控制子进程 sind die Optionen statisch und dynamisch. Wenn statisch ausgewählt ist, wird eine feste Anzahl von Kindprozessen von pm.max_children angegeben. Wenn dynamisch ausgewählt wird, wird es durch folgende Parameter bestimmt: pm.max_children #, die maximale Anzahl von Kindprozessen pm.start_servers #, die Anzahl der Prozesse beim Start pm.min_spare_servers # garantieren Sie eine Mindestanzahl von Leerlaufprozessen und erstellen Sie einen neuen Kindprozess, wenn der Leerlaufprozess kleiner als dieser Wert ist pm.max_spare_servers#, stellen Sie die maximale Anzahl der Leerlaufprozesse sicher; wenn der Leerlaufprozess größer als dieser Wert ist, wird dieser beseitigt.
pm.max_Anfragen = 1000 #设置每个子进程重生之前服务的请求数. Das ist sehr nützlich für Drittanbieter-Module, die Speicherlecks haben könnten. Wenn auf '0' gesetzt, wird die Anfrage immer akzeptiert. Äquivalent zu PHP_FCGI_MAX_REQUESTS Umweltvariablen. Standard: 0.
pm.status_path = /status #FPM状态页面的网址. Wenn du die Einstellungen nicht hast, kannst du nicht auf die Statusseite zugreifen. Standard: keine. Munin-Überwachung wird eingesetzt
ping.path = /ping #FPM监控页面的ping网址. Wenn du die Einstellungen nicht hast, kannst du nicht auf die Ping-Seite zugreifen. Diese Seite wird verwendet, um extern zu erkennen, ob das FPM aktiv ist und auf Anfragen reagieren kann. Beachten Sie, dass sie mit einem Schrägstrich (/) beginnen muss.
ping.response = pong #用于定义ping请求的返回相应. Gibt Text im Text-/Klarformat für HTTP 200 zurück. Standard: Pong.
request_terminate_timeout = 0 #设置单个请求的超时中止时间. Diese Option kann nützlich sein für Skripte, die aus einem besonderen Grund nicht abgebrochen werden php.ini in den Einstellungen 'max_execution_time'. Auf '0' gesetzt bedeutet 'Aus'. Du kannst versuchen, diese Option zu ändern, wenn häufig 502-Fehler auftreten.
request_slowlog_timeout = 10s #当一个请求该设置的超时时间后 werden die entsprechenden PHP-Callstack-Informationen in das langsame Log geschrieben. Auf '0' gesetzt bedeutet 'Aus'
slowlog = log/$pool.log.slow #慢请求的记录日志, mit request_slowlog_timeout
rlimit_files = 1024 #设置文件打开描述符的rlimit限制. Standardwert: Der Standard-Open-Handle ist 1024, der mit ulimit -n angesehen und um ulimit -n 2048 modifiziert werden kann.
rlimit_core = 0 #设置核心rlimit最大限制值. Verfügbare Werte: 'unbegrenzt', 0 oder positive ganze Zahlen. Standardwert: Systemdefinierter Wert.
chroot = #启动时的Chroot目录. Das definierte Verzeichnis muss ein absoluter Pfad sein. Wenn es keine Einstellung gibt, wird der Chroot nicht verwendet.
chdir = #设置启动目录 wird Chdir automatisch an dieses Verzeichnis gesendet, wenn es startet. Das definierte Verzeichnis muss ein absoluter Pfad sein. Standard: aktuelles Verzeichnis oder/Verzeichnis (wenn gechrootet)
catch_workers_output = ja #重定向运行过程中的stdout和stderr到主要的错误日志文件中. Wenn sie nicht gesetzt sind, werden stdout und stderr gemäß den FastCGI-Regeln auf /dev/null weitergeleitet. Standard: Null.
PHP-FPM-Parameterabstimmung
pm = dynamisch; Gibt an, welche Methode des Prozessmengenmanagements verwendet wird
Dynamisch bedeutet, dass die Anzahl der PHP-FPM-Prozesse dynamisch ist; die Anzahl wird zu Beginn pm.start_servers angegeben, steigt bei mehr Anfragen automatisch an, um sicherzustellen, dass die Anzahl der Leerlaufprozesse nicht weniger als pm.min_spare_servers ist, und wenn die Anzahl der Prozesse groß ist, wird auch entsprechend bearbeitet, um sicherzustellen, dass die Anzahl der überschüssigen Prozesse nicht mehr als pm.max_spare_server beträgt.
Statisch bedeutet, dass die Anzahl der Prozesse in PHP-FPM statisch ist und die Anzahl der Prozesse immer der von pm.max_children angegebenen Anzahl entspricht und weder erhöht noch verringert wird
pm.max_Kinder = 300; Die Anzahl der PHP-FPM-Prozesse, die im statischen Modus aktiviert sind pm.start_servers = 20; Die Anzahl der startenden php-fpm-Prozesse im dynamischen Modus pm.min_spare_servers = 5; Die Mindestanzahl der php-fpm-Prozesse im dynamischen Modus pm.max_spare_server = 35; Die maximale Anzahl von php-fpm-Prozessen im dynamischen Modus
Wenn pm statisch ist, ist nur der Parameter pm.max_children gültig. Das System öffnet eine festgelegte Anzahl von php-fpm-Prozessen
Wenn der PM dynamisch ist, ist der Parameter pm.max_children ungültig, und die letzten drei Parameter wirken. Das System startet pm.start_servers php-fpm-Prozesse zu Beginn des php-fpm-Laufs und passt dann dynamisch die Anzahl der php-fpm-Prozesse zwischen pm.min_spare_servers und pm.max_spare_server entsprechend den Bedürfnissen des Systems an
Welche PM-Methode ist also besser für unseren Server? Tatsächlich hat das Ausführen von PHP-Programmen – ähnlich wie Apache – nach der Ausführung mehr oder weniger Probleme mit Speicherlecks. Deshalb beansprucht ein php-fpm-Prozess am Anfang nur etwa 3 Millionen Speicher, und nach längerem Betrieb steigt er auf 20–30 Millionen an.
Für Server mit großem Speicher (wie 8G oder mehr) ist es tatsächlich sinnvoller, statische max_children anzugeben, da dies keine zusätzliche Prozesskontrolle erfordert und die Effizienz verbessert. Da häufiges Umschalten von php-fpm-Prozessen ebenfalls zu Verzögerungen führt, ist es besser, statische Effekte zu aktivieren, wenn der Speicher groß genug ist. Die Menge kann auch entsprechend Speicher/30M berechnet werden, zum Beispiel kann 8 GB Speicher auf 100 eingestellt werden, dann kann der für php-fpm verbrauchte Speicher in 2G-3G gesteuert werden. Wenn der Speicher etwas kleiner ist, wie etwa 1G, ist die Angabe der Anzahl statischer Prozesse günstiger für die Stabilität des Servers. Dies stellt sicher, dass php-fpm nur genug Speicher erhält und eine kleine Menge Speicher anderen Anwendungen zuweist, was den Betrieb des Systems reibungsloser macht.
Für einen Server mit wenig Speicher, wie ein VPS mit 256 Millionen Speicher, selbst wenn er nach einer 20-Millionen-Speichermenge berechnet wird, verbrauchen 10 php-CGI-Prozesse 200 Millionen Speicher, sodass der Systemabsturz normal sein sollte. Daher solltest du versuchen, die Anzahl der php-fpm-Prozesse zu kontrollieren und nach grob Klärung des Speichers, der von anderen Anwendungen genutzt wird, eine statische kleine Anzahl angeben, die das System stabiler macht. Oder die dynamische Methode verwenden, da die dynamische Methode den redundanten Prozess beendet und etwas Speicher zurückgewinnt, daher wird empfohlen, sie auf Servern oder VPS mit weniger Speicher zu verwenden. Die spezifische Maximalmenge wird basierend auf dem Speicher/20M ermittelt. Zum Beispiel wird für einen 512M-VPS empfohlen, pm.max_spare_server auf 20 zu setzen. Was die pm.min_spare_servers betrifft, wird empfohlen, sie nach der Auslastung des Servers einzustellen, wobei der passendere Wert zwischen 5~10 liegt.
200 auf einem Server mit 4G-Speicher sind in Ordnung (mein 1G-Testgerät, 64 ist das beste, es wird empfohlen, einen Stresstest zu verwenden, um das beste Preis-Leistungs-Verhältnis zu erzielen).
pm.max_requests = 10240;
Das größte Problem im nginx php-fpm-Konfigurationsprozess ist das interne Leckproblem: Die Serverlast ist nicht groß, aber die Speicherbelegung steigt rapide, verbraucht den Speicher schnell und beginnt, die Swap-Partition zu verbrauchen, und das System hängt schnell ab! Tatsächlich gibt es laut offizieller Einleitung kein Speicherverlust von php-cgi, und php-cgi gewinnt nach jeder Anfrage Speicher zurück, wird aber nicht an das Betriebssystem freigegeben, was dazu führt, dass eine große Menge Speicher von php-cgi belegt wird.
Die offizielle Lösung ist, den Wert des PHP_FCGI_MAX_REQUESTS zu senken; wenn php-fpm verwendet wird, ist das entsprechende php-fpm.conf das max_requests, das heißt, wie viele Anfragen zum Neustarten des Threads gesendet werden, müssen wir diesen Wert entsprechend senken, damit php-fpm automatisch Speicher freimacht, nicht die meisten 51200 im Internet usw.; tatsächlich gibt es einen weiteren damit verbundenen Wert max_ Kinder, so viele Prozesse werden bei jedem PHP-FPM eingerichtet, sodass der tatsächliche Speicherverbrauch max_children*max_requests* beträgt. Jede Anfrage verbraucht Speicher. Dadurch können wir den Speicherverbrauch schätzen, sodass keine Skripte zum Killen geschrieben werden müssen.
request_terminate_timeout = 30;
Maximale Ausführungszeit, konfigurierbar in php.ini (max_execution_time)
request_slowlog_timeout = 2; Schalte langsame Logs ein slowlog = log/$pool.log.slow; Langsamer Logarümmerpfad
rlimit_files = 1024; Es wurde eine Begrenzung für php-fpm hinzugefügt, um Dateideskriptoren zu öffnen
|