Maison  >  Article  >  développement back-end  >  Explication détaillée de l'installation et de la configuration de PHP-FPM

Explication détaillée de l'installation et de la configuration de PHP-FPM

青灯夜游
青灯夜游avant
2021-03-02 18:07:434327parcourir

Cet article vous amènera à en savoir plus sur PHP-FPM et à présenter l'installation et la configuration globale de PHP-FPM. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Explication détaillée de l'installation et de la configuration de PHP-FPM

[Apprentissage recommandé : "Tutoriel vidéo PHP"]

Fonction

PHP-FPM (PHP FastCGI Process Manager) signifie : gestionnaire de processus PHP FastCGI, logiciel utilisé pour gérer le pool de processus PHP et utilisé pour accepter les requêtes des serveurs Web.
PHP-FPM fournit une meilleure méthode de gestion des processus PHP, qui peut contrôler efficacement la mémoire et les processus, et recharger en douceur la configuration PHP.

(1). Pourquoi php-fpm apparaît-il

L'apparition de fpm est entièrement due à l'apparition de php-fastcgi. Un programme implémenté pour bien gérer php-fastcgi

(2). Qu'est-ce que php-fastcgi

php-fastcgi est juste un programme cgi qui analyse uniquement les requêtes php et renvoie En conséquence, il ne sera pas géré (d'où php-fpm).

(3) Pourquoi ne pas l'appeler php-cgi

En fait, il y avait un php-cgi avant l'apparition de php-fastcgi, mais son efficacité d'exécution était faible, il a donc été remplacé par php -fastcgi .

(4) Quelle est la différence entre fastcgi et cgi ?

Chers amis, la différence est énorme. Lorsqu'un serveur Web de service (nginx) distribue une requête, il sait que la requête est une requête php dynamique en faisant correspondre le suffixe, et transmettra la requête à php.

À l'ère de CGI, la pensée était relativement conservatrice. Après l'arrivée d'une requête, les informations de configuration de base dans php.ini étaient lues, l'environnement d'exécution était initialisé et un processus était créé à chaque lecture. la configuration, l'initialisation de l'environnement, le retour des données et la sortie du processus, avec le temps, le travail de démarrage du processus devient ennuyeux et particulièrement fatigant.

Quand PHP est arrivé à l'ère 5, tout le monde était particulièrement dégoûté par cette façon de travailler. Les gens qui voulaient être paresseux pensaient désespérément : puis-je laisser cgi démarrer un processus principal (maître) à la fois et créer. est-il en lecture seule ? Obtenez la configuration une fois, puis démarrez plusieurs processus de travail. Lorsqu'une demande arrive, elle est transmise au travailleur via le maître pour éviter la duplication du travail. C'est ainsi que fastcgi est né.

(5) Fastcgi est tellement bon, que dois-je faire si je manque de travailleurs démarrés ?
Quand il n'y a pas assez de travailleurs, le maître démarrera dynamiquement les travailleurs grâce aux informations de la configuration, et pourra reprendre les travailleurs lorsqu'ils sont inactifs

(6) Je ne comprends toujours pas ce que php -fpm est-ce ?
Il s'agit de gérer le programme qui démarre un processus maître et plusieurs processus de travail

PHP-FPM créera un processus principal et contrôlera quand et comment transmettre les requêtes HTTP à un ou plusieurs. processus enfants pour le traitement. Le processus principal PHP-FPM contrôle également le moment où les
processus enfants PHP sont créés (pour gérer plus de trafic provenant de l'application Web) et détruits (le processus enfant est en cours d'exécution depuis trop longtemps ou n'est plus nécessaire). Chaque processus du pool de processus PHP-FPM dure plus longtemps qu'une seule requête HTTP et peut gérer 10, 50, 100, 500 requêtes HTTP ou plus.

InstallationPHP a incorporé php-fpm dans le code principal de php après la version 5.3.3. Ainsi, php-fpm ne nécessite pas de téléchargement ni d'installation séparés.

Si vous souhaitez que php prenne en charge php-fpm, il vous suffit d'inclure --enable-fpm lors de la compilation du code source php.


Configuration globaleDans Centos, le fichier de configuration principal de PHP-FPM est /etc/php7/php-fpm.conf.

Un sous-processus spécifié échoue dans une période de temps spécifiée. PHP-FPM redémarre :

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

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

Configurer le pool de processus Le reste du fichier de configuration PHP-FPM est une zone appelée Pool Definitions. Cette zone configure les paramètres utilisateur pour chaque pool de processus PHP-FPM. Le pool de processus PHP-FPM est une série de sous-processus PHP associés.

Habituellement, une application PHP possède son propre pool de processus

. Centos introduit le fichier de définition du pool de processus en haut du fichier de configuration principal PHP-FPM :

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

www.conf est le fichier de configuration par défaut du pool de processus PHP-FPM.

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个进程。

...

Modifiez et enregistrez, redémarrez le processus principal PHP-FPM :

sudo systemctl restart php-fpm.service

Pour plus de détails sur la configuration du pool de processus PHP-FPM, veuillez consulter http://php.net/manual /install.fpm.configuration.php

Environnement de développement de l'entreprise de référenceLa configuration de l'environnement de test est la suivante :

[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上

Configuration de l'environnement de production :

Transférer la requête à PHP-FPMExemple nginx :

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

Réflexion

[x] Questions à réfléchir :
    Quels facteurs déterminent la simultanéité du serveur ?

  • Nombre maximum de processus PHP-FPM,
nombre simultané de Nginx

(nginx n'agit que comme un serveur proxy), utilisation de la mémoire, surcharge du processeurQPS du serveur ( nombre de requêtes traitées par seconde) = nombre moyen de connexions de requêtes * (1/temps de réponse

Concurrence = temps effectif * QPS

 ;
  • Solution :
  1. Ajouter un déchargement de machine
    • Calculer la nécessité d'ajouter des machines en fonction du degré de concurrence
  2. Ajouter une seule machine Nouvelles fonctionnalités
    • Activer l'opcache php et augmenter l'espace mémoire
    • Se connecter au système de cache
    • Optimisation SQL
    • Optimisation php
      ...

Pour plus de connaissances liées à la programmation, veuillez visiter : Vidéo de programmation ! !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer