Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erklärung, was PHP-FPM in PHP ist? Was ist der Nutzen?

Detaillierte Erklärung, was PHP-FPM in PHP ist? Was ist der Nutzen?

青灯夜游
青灯夜游nach vorne
2020-07-17 15:26:2713994Durchsuche

Detaillierte Erklärung, was PHP-FPM in PHP ist? Was ist der Nutzen?

PHP-FPM (PHP FastCGI Process Manager) bedeutet: PHP FastCGI Process Manager, Software zur Verwaltung des PHP-Prozesspools und zur Annahme von Anfragen von Webservern.

Funktion

PHP-FPM bietet eine bessere PHP-Prozessverwaltungsmethode, mit der Speicher und Prozesse effektiv gesteuert und die PHP-Konfiguration reibungslos neu geladen werden können. [Verwandte Empfehlungen: PHP-Tutorial]

(1). Warum erscheint

fpm? Ein Programm, das implementiert wurde, um PHP-Fastcgi gut zu verwalten.

(2) Was ist PHP-Fastcgi? wird nicht verwaltet (daher php-fpm).

(3) Warum nicht PHP-CGI nennen?

Tatsächlich gab es vor dem Erscheinen von PHP-Fastcgi ein PHP-CGI, dessen Ausführungseffizienz jedoch gering war, sodass es durch PHP ersetzt wurde -fastcgi .

(4) Was ist der Unterschied zwischen fastcgi und cgi?

Liebe Freunde, der Unterschied ist enorm. Wenn ein Dienst-Webserver (Nginx) eine Anfrage verteilt, erkennt er, dass es sich bei der Anfrage um eine dynamische PHP-Anfrage handelt, indem er das Suffix abgleicht, und leitet die Anfrage an PHP weiter.

Im Zeitalter von CGI war die Denkweise relativ konservativ. Nachdem eine Anfrage eingegangen war, wurden die grundlegenden Konfigurationsinformationen in php.ini gelesen, die Ausführungsumgebung initialisiert und jedes Mal ein Prozess erstellt Nach der Konfiguration, der Initialisierung der Umgebung, der Rückgabe von Daten und dem Beenden des Prozesses wird das Starten des Prozesses mit der Zeit mühsam und besonders ermüdend.

Als PHP in die Ära 5 kam, waren alle besonders angewidert von dieser Arbeitsweise. Leute, die faul sein wollten, dachten verzweifelt: Kann ich CGI jeweils einen Hauptprozess (Master) starten lassen? Schreibgeschützt machen? Die Konfiguration einmal abrufen und dann mehrere Worker-Prozesse starten. Wenn eine Anfrage eingeht, wird sie über den Master an den Worker weitergeleitet, um Doppelarbeit zu vermeiden. So wurde fastcgi geboren.

(5) Fastcgi ist so gut, was soll ich tun, wenn mir die angefangenen Arbeitskräfte ausgehen?

Wenn nicht genügend Worker vorhanden sind, startet der Master die Worker dynamisch über die Informationen in der Konfiguration und kann die Worker zurücknehmen, wenn sie inaktiv sind


(6) Ich verstehe immer noch nicht, was PHP ist -fpm ist?

Es dient dazu, das Programm zu verwalten, das einen Master-Prozess und mehrere Worker-Prozesse startet. PHP-FPM erstellt einen Hauptprozess und steuert, wann und wie HTTP-Anfragen zur Verarbeitung an einen oder mehrere untergeordnete Prozesse weitergeleitet werden.


Der PHP-FPM-Hauptprozess steuert auch, wann erstellt (mehr Datenverkehr von der Webanwendung verarbeitet) und gelöscht (der untergeordnete Prozess wurde zu lange ausgeführt oder wird nicht mehr benötigt)

PHP-untergeordnete Prozesse . Jeder Prozess im PHP-FPM-Prozesspool existiert länger als eine einzelne HTTP-Anfrage und kann 10, 50, 100, 500 oder mehr HTTP-Anfragen verarbeiten.

Installation

PHP hat php-fpm nach 5.3.3 in den Kerncode von PHP integriert. PHP-FPM erfordert also keinen separaten Download und keine separate Installation. Wenn Sie möchten, dass PHP PHP-FPM unterstützt, müssen Sie beim Kompilieren des PHP-Quellcodes nur --enable-fpm einschließen.

Globale Konfiguration

In Centos ist die Hauptkonfigurationsdatei von PHP-FPM /etc/php7/php-fpm.conf. Ein angegebener Unterprozess schlägt innerhalb eines bestimmten Zeitraums fehl, PHP-FPM startet neu:

#在指定的一段时间内,如果失效的PHP-FPM子进程数超过这个值,PHP-FPM主进程将优雅重启。
emergency_restart_threshold = 10

#设定emergency_restart_interval 设置采用的时间跨度。
emergency_restart_interval = 1m

Prozesspool konfigurieren

Der Rest der PHP-FPM-Konfigurationsdatei ist ein Bereich namens Pool Definitions. In diesem Bereich werden Benutzereinstellungen für jeden PHP-FPM-Prozesspool konfiguriert. Der PHP-FPM-Prozesspool besteht aus einer Reihe verwandter PHP-Unterprozesse. Normalerweise verfügt eine PHP-Anwendung über einen eigenen Prozesspool

Centos führt die Prozesspool-Definitionsdatei oben in der PHP-FPM-Hauptkonfigurationsdatei ein:

include=/etc/php7/php-fpm.d/*.conf

www.conf ist die Standardkonfigurationsdatei für den PHP-FPM-Prozesspool.

user= nobody
#拥有这个 PHP-FPM进程池中子进程的系统用户。要把这个设置的值设用的非根用户的用户名。

group = nobody
#拥有这个 PHP-FPM进程池中子进程的系统用户组。要把这个设置的值设应用的非根用户所属的用户组名。

listen=[::]]:9000
#PHP-FPM进程池监听的IP地址和端口号,让 PHP-FPM 只接受 nginx从这里传入的请求。

listen. allowed clients =127.0.0.1
#可以向这个 PHP-FPM进程池发送请求的IP地址(一个或多个)。

pm.max children =51
#这个设置设定任何时间点 PHP-FPM进程池中最多能有多少个进程。这个设置没有绝对正确的值,你应该测试你的PHP应用,确定每个PHP进程需要使用多少内存,然后把这个设置设为设备可用内存能容纳的PHP进程总数。对大多数中小型PHP应用来说,每个PHP进程要使用5~15MB内存(具体用量可能有差异)。 假设我们使用设备为这个PHP-FPM进程池分配了512MB可用内存,那么可以把这个设置设为(512MB总内存)/(每个进程使用10MB) = 51个进程。

...

Bearbeiten und speichern, PHP-FPM-Hauptprozess neu starten:

sudo systemctl restart php-fpm.service

Details zur Konfiguration des PHP-FPM-Prozesspools finden Sie unter http://php.net/manual /install.fpm.configuration.php

Referenzunternehmens-Entwicklungsumgebung

Die Konfiguration der Testumgebung ist wie folgt:

[www]
user = nobody               #进程的发起用户和用户组,用户user是必须设置,group不是  nobody 任意用户
group = nobody

listen = [::]:9000          #监听ip和端口,[::] 代表任意ip
chdir = /app                #在程序启动时将会改变到指定的位置(这个是相对路径,相对当前路径或chroot后的“/”目录) 

pm = dynamic                #选择进程池管理器如何控制子进程的数量  #static: 对于子进程的开启数路给定一个锁定的值(pm.max_children) #dynamic: 子进程的数目为动态的,它的数目基于下面的指令的值(以下为dynamic适用参数)
pm.max_children = 16        #同一时刻能够存货的最大子进程的数量
pm.start_servers = 4        #在启动时启动的子进程数量
pm.min_spare_servers = 2    #处于空闲"idle"状态的最小子进程,如果空闲进程数量小于这个值,那么相应的子进程会被创建
pm.max_spare_servers = 16   #最大空闲子进程数量,空闲子进程数量超过这个值,那么相应的子进程会被杀掉。
catch_workers_output = Yes  #将worker的标准输出和错误输出重定向到主要的错误日志记录中,如果没有设置,根据FastCGI的指定,将会被重定向到/dev/null上
Konfiguration der Produktionsumgebung:

Anfrage an PHP-FPM weiterleiten

nginx als Beispiel:

server {
       listen       83;
       server_name mobile.com;
       root /app/mobile/web/;

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }

        location / {
                index  index.html index.htm index.php;
                # Redirect everything that isn't a real file to index.php
                try_files $uri $uri/ /index.php$is_args$args;
        }

        #把HTTP请求转发给PHP-FPM进程池处理
        location ~ .*\.php                 include fastcgi_params;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_pass   192.168.33.30:9000;      #监听9000端口
                fastcgi_index  index.php;
                try_files $uri =404;
                #include fastcgi.conf;
        }
        location ~ /\.(ht|svn|git) {
                deny all;
        }
        access_log  /app/wwwlogs/access.log;
        error_log   /app/wwwlogs/error.log;
}
php-fpm startet, startet neu, beendet den Betrieb

php-fpm starten:

/usr/sbin/php-fpm
或
/usr/local/php/sbin/php-fpm
php 5.3.3 und höher php-fpm nicht mehr unterstützt das /usr/local/php/, das php-fpm zuvor hatte (start|stop|reload) und andere Befehle, schauen Sie sich diesen altmodischen Befehl also nicht mehr an, Sie müssen signal verwenden Steuerung: Der Masterprozess kann die folgenden Signale verstehen

INT, TERM Sofort beenden

QUIT Reibungslos beenden

USR1 Protokolldatei erneut öffnen

USR2 Reibungslos neu laden Alle Worker-Prozesse und Konfigurations- und Binärmodule neu laden

Eine einfache direkte Neustartmethode:

Überprüfen Sie zunächst die Master-Prozessnummer von php-fpm

# ps aux|grep php-fpm
root     21891  0.0  0.0 112660   960 pts/3    R+   16:18   0:00 grep --color=auto php-fpm
root     42891  0.0  0.1 182796  1220 ?        Ss   4月18   0:19 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
nobody   42892  0.0  0.6 183000  6516 ?        S    4月18   0:07 php-fpm: pool www
nobody   42893  0.0  0.6 183000  6508 ?        S    4月18   0:17 php-fpm: pool www

Starten Sie php- fpm:
kill -USR2 42891

Die obige Lösung generiert im Allgemeinen keine Datei php-fpm.pid. Wenn Sie php-fpm.pid generieren möchten, verwenden Sie die folgende Lösung:

上面master进程可以看到,matster使用的是/usr/local/php/etc/php-fpm.conf这个配置文件,cat /usr/local/php/etc/php-fpm.conf 发现:

[global]
; Pid file
; Note: the default prefix is /usr/local/php/var
; Default Value: none
;pid = run/php-fpm.pid

pid文件路径应该位于/usr/local/php/var/run/php-fpm.pid,由于注释掉,所以没有生成,我们把注释去除,再kill -USR2 42891 重启php-fpm,便会生成pid文件,下次就可以使用以下命令重启,关闭php-fpm了:

php-fpm 关闭:
kill -INT 'cat /usr/local/php/var/run/php-fpm.pid'
php-fpm 重启:
kill -USR2 'cat /usr/local/php/var/run/php-fpm.pid'

相关学习推荐:PHP编程从入门到精通

Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung, was PHP-FPM in PHP ist? Was ist der Nutzen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen