So richten Sie PHP-FPM ein: Überprüfen Sie zuerst alle Prozesse, die sich auf PHP-FPM beziehen, und überprüfen Sie dann die Unterprozesse unter PHP-FPM. Überprüfen Sie dann den Parameterprozess Parameterkonfiguration.
Empfohlen: „PHP-Video-Tutorial“
php-fpm ist ein Prozessmanager für PHP. Viele Arbeitsprozesse unter PHP werden vom Prozessmanager php-fpm verwaltet.
Der vollständige Name von php-fpm ist PHP FastCGI Process Manager. Nachdem php-fpm gestartet wurde, liest es zuerst php.ini und dann die entsprechende conf-Konfigurationsdatei. Die conf-Konfiguration kann die Konfiguration von php.ini überschreiben. Nach dem Start von php-fpm wird ein Master-Prozess erstellt, der Port 9000 überwacht (konfigurierbar). Der Master-Prozess erstellt mehrere Unterprozesse basierend auf fpm.conf/www.conf, und die Unterprozesse werden für die eigentliche Verarbeitung verwendet Geschäft. Wenn ein Client (z. B. Nginx) eine Verbindung zu Port 9000 herstellt, akzeptiert der inaktive Unterprozess dies selbst. Wenn alle Unterprozesse beschäftigt sind, werden die neuen zu akzeptierenden Verbindungen vom Master in die Warteschlange gestellt und gewartet Der FPM-Unterprozess soll inaktiv sein. Die Länge der Warteschlange, in der akzeptierte Halbverbindungen gespeichert werden, wird von listen.backlog konfiguriert.
hierpool wwwsind alle Unterprozesse von PHP-FPM, was wir oft als Arbeitsprozess bezeichnen.
Mit dem obigen Befehl können wir tatsächlich die mit php-fpm verbundenen Prozesse anzeigen. Wenn wir den Masterprozess und den Arbeitsprozess von php-fpm intuitiver anzeigen müssen, können wir dies tun Verwenden Sie die folgende Methode, um die Ansicht zu verarbeiten. Die 5370 ist hier die Master-Prozessnummer von PHP-FPM. Dies ist anhand des obigen Befehls deutlich zu erkennen.
Durch den obigen Befehl können Sie sehen, dass php-fpm der Masterprozess ist und unten 15 Unterprozesse hat. Die Anzahl der untergeordneten Prozesse kann hier vom Prozess angepasst werden. Prozesskonfiguration über die folgenden Parameter:
pm = dynamic # 动态创建子进程 pm.max_children = 20 # 最大子进程数 pm.start_servers = 15 # 初始化php-fpm进程时,默认的子进程数复制代码
#php-fpm的运行权限。 #以什么用户什么组的权限来运行池fpm。 user = www group = www #php-fpm的运行方式,可以使端口,也可以使socke文件。 #如果是端口则是走tcp,如果是socket则直接读socket文件,这样性能相对更好。 listen = 127.0.0.1:9000 #拥有socket权限的用户,需要和上面的user、group配置相结合。 #如果采用的端口的方式,则不配置。 listen.owner = www listen.group = www listen.mode = 0660 #这是php-fpm端口连接的地址。多个用","隔开。默认任意地址都可以连接。 #例如Nginx和php-fpm不在同一台服务器上,这里的值就是Nginx服务的ip地址。 #当Nginx和php-fpm配置在同一台服务器上,则直接写127.0.0.1即可。 listen.allowed_clients = 127.0.0.1 #pid进程文件存放的位置,当我们启用一个php服务, #则会自动创建一个该pid文件,其实我们可以直接把该文件理解理解php-fpm的进程号文件, #两则是等价的。默认为none。 pid = /opt/remi/php72/root/var/run/php-fpm/php-fpm.pid #错误日志位置,默认:安装路径 #INSTALL_PREFIX#/log/php-fpm.log。 #如果设置为syslog,log就会发送给syslogd服务而不会写进文件里。 error_log = /opt/remi/php72/root/var/log/php-fpm/error.log #PHP限制的文件扩展名 security.limit_extensions = .php .php3 .php4 .php5 .php7 #系统日志标示,如果跑了多个fpm进程,需要用这个来区分日志是谁的。 syslog.ident = php-fpm #日记登记,可选:alert, error, warning, notice, debug。 log_level = notice #紧急重启阈值,需要与下面emergency_restart_interval参数一起配置。 emergency_restart_threshold = 60 # 紧急重启阈值的时间范围。在此参数设置的时间内, # 出现SIGSEGV或SIGBUS的子进程数超过emergency_restart_threshold参数设置的值。 # 那么fpm就会优雅的重启,值是0表示off这个功能,可用的单位有:s秒,m分,h时,d天。 emergency_restart_interval = 60s #设置子进程接受主进程复用信号的超时时间。 process_control_timeout = 0 #当动态管理子进程时,fpm最多能fork多少个进程,0表示无限制, # 这是所有进程池能启动子进程的总和,谨慎使用。 process.max = 128 #设置子进程的优先级,在master进程以root用户启动时有效; #如果没有设置,子进程会继承master进程的优先级,值范围-19(最高)到20(最低),默认不设置。 process.priority = -19 #设置成no用于调试bug,默认为yes。 daemonize = yes #master进程最多能打开的文件数量。默认采用系统设置的值。 rlimit_files = 1024 #master进程核心rlimit限制值;可选unlimited或>=0的整数,默认为系统的值。 rlimit_core = 0 #事件处理机制,默认自动检测,可选值:select,poll, #epoll(linux>=2.5.44),kqueue,/dev/poll,port events.mechanism = epoll #fpm想系统发送状态的频率。单位有s,m,h。 #前提是fpm被设置会系统服务。 systemd_interval = 10s
#php-fpm的队列长度。 listen.backlog = 65535 #php进程池权限,同样要master进程是root用户才有效, #和上面的全局设置一样,不设置的话会继承master进程的优先级。 process.priority = -19 #子进程管理方式 #static(静态配置,在启动php-fpm时根据该值创建固定的子进程数量); #dynamic(动态配置,在启动php-fpm时根据pm.start_servers的值初始化对应的子进程数,至少一个子进程); #ondemand(按需配置,在启动php-fpm时不创建子进程,而是根据请求动态fork子进程); pm = dynamic #最大子进程数量 pm.max_children = 5 #初始化子进程数量,与上面的pm = dynamic配置使用。 pm.start_servers = 2 #服务器闲置时最少保持2个子进程,不够这个数就会创建,只适用动态dynamic管理方式 pm.min_spare_servers = 2 #服务器闲置时最多要有几个,多了会kill,只适用动态dynamic管理方式 pm.max_spare_servers = 3 #子进程闲置时间,也就是说子进程没有可处理的任务时,在该之间使就会被killed。 pm.process_idle_timeout = 10s #每个子进程最大的处理请求数量。在一定程度上可以防止内存泄漏。 pm.max_requests = 500 #php-fpm状态监控的uri pm.status_path string #php-fpm监控页面的 ping 网址。 #如果没有设置,则无法访问 ping 页面。 #该页面用于外部检测php-fpm是否存活并且可以响应请求。请注意必须以斜线开头(/)。 ping.path string #用于定义ping请求的返回响应。返回为 HTTP 200 的 text/plain 格式文本。默认值:pong。 ping.response string #设置worker的nice(2)优先级(如果设置了的话)。 #该值从 -19(最高优先级) 到 20(更低优先级)。 #默认值:不设置 process.priority int #检测路径时使用的前缀 prefix string #访问文件日志,没啥用处,比如yii2每次都记录访问index.php,只是记录真实的PHP文件。 access.log = var/log/$pool.access.log #php的慢日志 slowlog = var/log/$pool.log.slow #慢日志时间阈值 request_slowlog_timeout = 2s #单个请求的超时时间,当php.ini设置的最大执行时间未生效,则交由它来处理。 request_terminate_timeout = 3s #最大打开句柄数,默认为系统值。 rlimit_files = 1024 #最多的核心使用数,默认为系统分配。 rlimit_core = 0
Die Backlog-Größeneinstellung von php-fpm hängt von den Verarbeitungsfähigkeiten von php-fpm ab, nicht größer ist besser.
Wenn der Wert zu groß eingestellt ist, kann PHP-FPM ihn nicht verarbeiten und Nginx wartet auf eine Zeitüberschreitung, trennt die Verbindung und meldet einen 504-Gateway-Zeitüberschreitungsfehler. Als php-fpm gleichzeitig die Verarbeitung beendete und die Schreibdaten für Nginx vorbereitete, stellte es fest, dass die TCP-Verbindung getrennt war, und meldete „Broken Pipe“.
Wenn der Wert zu klein eingestellt ist, können Client-Anfragen wie Nginx überhaupt nicht in die Akzeptanzwarteschlange von PHP-FPM gelangen und es wird der Fehler „502 Bad Gateway“ gemeldet. Daher muss die Größe des Rückstands anhand der QPS von PHP-FPM bestimmt werden. Die beste Berechnungsmethode ist QPS=Backlog. Einzelheiten finden Sie unter: www.jianshu.com/p/3ecc99ebf…
php-fpm startet mit Socket oder Port. Diese beiden Methoden werden entsprechend der tatsächlichen Situation konfiguriert.
nginx und php-fpm befinden sich auf demselben Server. Zu diesem Zeitpunkt kann die Unix-Socket-Interprozesskommunikation direkt anstelle der TCP-Port-Kommunikation verwendet werden, was die Zeit beim Herstellen einer Verbindung sparen und dadurch die Leistung verbessern kann. Die Sock-Datei kann überall erstellt werden, solange fpm die Berechtigung hat, die Datei in diesem Verzeichnis zu schreiben, und nginx die Berechtigung hat, sie zu lesen. Die TCP-Verbindung ist stabiler, da das TCP-Protokoll die Richtigkeit der Daten gewährleistet, Sock jedoch weniger Datenkopien und Kontextwechsel aufweist und weniger Ressourcen verbraucht. Socket kann jedoch nur verwendet werden, wenn sich Nginx und FPM auf demselben Computer befinden.
So wählen Sie Socket-Startup oder Port-Startup aus.
Da die TCP-Methode eine höhere Parallelität aufweist als die Unix-Methode, wird empfohlen, die TCP-Methode für Projekte mit hoher Parallelität zu verwenden. In der Nginx-Konfigurationsbeispieldatei wird nun standardmäßig die TCP-Methode verwendet.
Bei Verwendung der Unix-Methode besteht der Optimierungspunkt darin, die Socket-Datei im Verzeichnis /dev/shm abzulegen. Informationen dazu, warum sie in diesem Verzeichnis abgelegt wird, finden Sie unter.www.linuxidc.com/Linux/2014-…. Die allgemeine Bedeutung besteht darin, dass die Dateien in diesem Verzeichnis nicht auf der Festplatte, sondern im Speicher gespeichert werden. Wer ist beim Festplatten- und Speicherlesen schneller und wer langsamer? Der Speicher ist definitiv am schnellsten.
So zeigen Sie die Socket-Datei an, wenn Sie im Socket-Modus gestartet werden.
socket文件是根据上面提到的pid配置项而定的。我们可以直接使用cat命令,查看进程号。
子进程默认启动数量,通过上面的pm = dynamic 配置,我们知道这种方式是动态配置子进程大小的,同时我们也可以设置默认的子进程数。
pm = dynamic pm.max_children = 20### 默认15个子进程,演示的效果就是上面的shell命令的结果图。pm.start_servers = 15
当我们尝试设置为3时,显示如下错误信息。
说明,这里的start_servers配置项和min_spare_servers配置是有一定的关系的。我们设置为最小10,结果就能正常启动php-fpm了。
Das obige ist der detaillierte Inhalt vonSo richten Sie PHP FPM ein. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!