Heim  >  Artikel  >  Backend-Entwicklung  >  Ausführliche Erläuterung der Installation und Konfiguration von PHP-FPM

Ausführliche Erläuterung der Installation und Konfiguration von PHP-FPM

青灯夜游
青灯夜游nach vorne
2021-03-02 18:07:434327Durchsuche

In diesem Artikel erfahren Sie mehr über PHP-FPM und stellen die Installation und globale Konfiguration von PHP-FPM vor. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.

Ausführliche Erläuterung der Installation und Konfiguration von PHP-FPM

【Empfohlene Studie: „PHP-Video-Tutorial“】

Funktion

PHP-FPM (PHP FastCGI Process Manager) bedeutet: PHP FastCGI-Prozessmanager, der zur Verwaltung der PHP-Prozesspool-Software verwendet wird das Anfragen von Webservern entgegennimmt.
PHP-FPM bietet eine bessere PHP-Prozessverwaltungsmethode, mit der Speicher und Prozesse effektiv gesteuert und die PHP-Konfiguration reibungslos neu geladen werden können.

(1). Warum erscheint php-fpm? Ein Programm, das implementiert wurde, um PHP-Fastcgi gut zu verwalten. (2) Was ist PHP-Fastcgi?

(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-fastcgi ersetzt wurde.

(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 und die Ausführungsumgebung initialisiert. Jedes Mal musste ein Prozess erstellt und die Konfiguration gelesen werden . Initialisieren Sie die Umgebung, geben Sie Daten zurück und beenden Sie den Prozess. Mit der Zeit wird das Starten des Prozesses 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 Master-Prozess (Master) starten lassen und ihn nur lesen lassen? Die Konfiguration einmal durchführen? Dann mehrere Worker-Prozesse (Worker) starten. Wenn eine Anfrage eintrifft, wird diese über den Master an den Worker weitergeleitet, sodass Doppelarbeit vermieden werden kann. So wurde fastcgi geboren.

(5) Fastcgi ist so gut, was soll ich tun, wenn die gestarteten Arbeiter 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-FPM ist?

Es besteht darin, einen Master-Prozess und ein Programm für mehrere Worker-Prozesse zu verwalten und zu starten.

PHP-FPM erstellt einen Hauptprozess, um zu steuern, wann und wie HTTP-Anfragen zur Verarbeitung an einen oder mehrere untergeordnete Prozesse weitergeleitet werden. Der PHP-FPM-Hauptprozess steuert auch, wann
PHP-Unterprozesse erstellt (um mehr Datenverkehr von der Webanwendung zu verarbeiten) und zerstört werden (der Unterprozess wurde zu lange ausgeführt oder wird nicht mehr benötigt). Jeder Prozess im PHP-FPM-Prozesspool lebt 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.

Wenn ein angegebener untergeordneter Prozess innerhalb eines bestimmten Zeitraums fehlschlägt, wird PHP-FPM neu gestartet:

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

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

Der Rest der PHP-FPM-Konfigurationsdatei ist ein Bereich namens Pool-Definitionen. 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
Konfigurationsdetails des PHP-FPM-Prozesspools finden Sie unter http://php.net/manual/install.fpm.configuration.php

Beziehen Sie sich auf die Entwicklungsumgebung des Unternehmens.

Die Konfiguration der Testumgebung lautet 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: Leiten Sie die Anfrage an PHP-FPM weiter.

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;
}

Denken

[x] think Frage: Von welchen Faktoren hängt die Parallelität des Servers ab?

Maximale Anzahl von PHP-FPM-Prozessen,

Nginx-Parallelitätszahl (Nginx fungiert nur als Proxyserver), Speichernutzung, CPU-OverheadQPS des Servers (Anzahl der pro Sekunde verarbeiteten Anfragen) = durchschnittliche Anzahl der Anfragen Verbindungen* (1/Antwortzeit);

Parallelität = Effektive Zeit * QPS;
  • Lösung:
  1. Maschinen-Offload hinzufügen
    • Berechnen Sie die Notwendigkeit, Maschinen entsprechend dem Umfang der Parallelität hinzuzufügen.
  2. Fügen Sie neue eigenständige Funktionen hinzu system
    • SQL-Optimierung
    • php-Optimierung
    • ...

    • Weitere Programmierkenntnisse finden Sie unter:
    Programmiervideo
  3. ! !

Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung der Installation und Konfiguration von PHP-FPM. 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