Comprendre la configuration et le résumé d'utilisation de PHP-FPM en une minute

慕斯
Libérer: 2023-04-10 09:42:01
avant
13630 Les gens l'ont consulté

Nous avons tellement appris sur PHP. Je me demande si vous maîtrisez parfaitement la configuration et le résumé d'utilisation de PHP-FPM. Sinon, suivez cet article pour continuer à apprendre

Configuration de PHP-FPM. et résumé d'utilisation :

PHP-FPM est un gestionnaire PHP FastCGI. Il s'agit en fait d'un patch du code source PHP, conçu pour intégrer le processus FastCGI. La gestion est introduite dans le progiciel PHP. . Nous devons le patcher dans le code source PHP puis le compiler avant de pouvoir l'utiliser. Nous pouvons désormais l'ouvrir et l'utiliser directement dans PHP 5.3.2 et les versions plus récentes, car PHP l'a inclus dans le progiciel de cette version, il n'existe donc plus en tant que package de correctifs.

· Compréhension de plusieurs concepts

· Configuration Nginx+PHP

· Fonctionnement de Php-Fpm

1. Compréhension de plusieurs concepts

1), CGI

CGI signifie "Common Gateway Interface". C'est l'interface permettant au serveur HTTP de communiquer avec les programmes sur d'autres machines, et ses programmes doivent s'exécuter sur le serveur réseau.

REMARQUE :

CGI peut être écrit dans n'importe quel langage à condition que le langage ait des variables d'entrée, de sortie et d'environnement standard.

2), FastCGI

FastCGI est un CGI résident Il peut être exécuté à tout moment, tant qu'il est activé, il ne faudra pas de temps pour bifurquer à chaque fois (c'est le cas). moyen le plus efficace de CGI). Le modèle fork-and-execute très critiqué). Il prend également en charge l'informatique distribuée, c'est-à-dire que les programmes FastCGI peuvent être exécutés sur des hôtes autres que le serveur du site Web et accepter les demandes d'autres serveurs du site Web.

FastCGI est une extension ouverte CGI à architecture évolutive et indépendante du langage. Son comportement principal est de conserver le processus de l'interpréteur CGI en mémoire et ainsi d'obtenir des performances plus élevées. Nous savons que le chargement répété de l'interpréteur CGI est la principale raison des faibles performances CGI. Si l'interpréteur CGI est stocké en mémoire et accepté par le gestionnaire de processus FastCGI, il peut fournir de bonnes performances, évolutivité, etc.

Avantages :

1. FastCGI est indépendant du langage

2. FastCGI fonctionne indépendamment du serveur Web principal, offrant un environnement plus sécurisé que l'API. Les API relient le code d'une application au serveur Web principal, ce qui signifie qu'une application avec la mauvaise API pourrait interrompre d'autres applications ou le serveur principal. Le code d'application API malveillant peut même voler la clé d'une autre application ou d'un serveur principal ;

3. La technologie FastCGI prend actuellement en charge les langages suivants : C/C++, Java, Perl, Tcl, Python, SmallTalk, Ruby, etc. . Des modules associés sont également disponibles sur des serveurs populaires tels que Apache, ISS, Lighttpd ;

4. FastCGI ne dépend de l'architecture interne d'aucun serveur Web, donc même si la technologie du serveur change, FastCGI reste stable ; >

Inconvénients :

Parce qu'il est multi-processus, il consomme plus de mémoire serveur que le multi-threading CGI. L'interpréteur PHP-CGI consomme 7 à 25 Mo de mémoire par processus. Ou 100 est un très grand nombre de mémoire.

Le serveur Nginx 0.8.46+PHP 5.2.14 (FastCGI) a 30 000 connexions simultanées. Les 10 processus Nginx ouverts consomment 150 Mo de mémoire (15 M*10 = 150 M), et les 64 php-cgi ouverts. 1280 Mo de mémoire (20 M*64 = 1280 M), plus la mémoire consommée par le système lui-même, la consommation totale est inférieure à 2 Go de mémoire. Si la mémoire du serveur est petite, vous ne pouvez ouvrir que 25 processus php-cgi, de sorte que la mémoire totale consommée par php-cgi n'est que de 500 Mo.

Les données ci-dessus sont extraites de Nginx 0.8.x + PHP 5.2.13 (FastCGI) pour construire un serveur Web dix fois meilleur qu'Apache (version 6).

Principe :

1. Lorsque le serveur Web démarre, le gestionnaire de processus FastCGI est chargé

2. Le gestionnaire de processus FastCGI est initialisé et démarre plusieurs processus interpréteurs CGI ( PHP-CGI) et attendez la connexion depuis le serveur Web ;

3. Lorsque la requête du client atteint le serveur Web, le gestionnaire de processus FastCGI sélectionne et se connecte à un interpréteur CGI, et le serveur Web convertit le CGI. Les variables d'environnement et l'entrée standard sont envoyées au processus enfant FastCGI PHP-CGI.

4. Une fois le sous-processus FastCGI terminé, il renvoie la sortie standard et les informations d'erreur au serveur Web à partir de la même connexion. Lorsque le processus enfant FastCGI ferme la connexion, la demande est traitée. Le processus enfant

FastCGI attend ensuite et gère la prochaine connexion du gestionnaire de processus FastCGI (exécuté sur le serveur Web). En mode CGI, PHP-CGI se termine ici.

Dans la situation ci-dessus, vous pouvez imaginer à quel point CGI est généralement lent. Chaque requête Web adressée à PHP doit réanalyser le php.ini, recharger toutes les extensions et réinitialiser toutes les structures de données. Avec FastCGI, tout cela ne se produit qu’une seule fois, au démarrage du processus. De plus, les connexions persistantes à la base de données fonctionnent.

REMARQUE :

Le principal avantage de FastCGI est de séparer les langages dynamiques​​du serveur HTTP, donc Nginx et PHP/PHP-FPM sont souvent déployés sur des serveurs différents pour partager la pression sur le serveur Nginx front-end et permettre à Nginx de gérer exclusivement les requêtes statiques et transmettre les requêtes dynamiques, tandis que le serveur PHP/PHP-FPM analyse exclusivement les requêtes dynamiques PHP.

3), PHP-CGI

PHP-CGI est le gestionnaire FastCGI fourni avec PHP.

Inconvénients de PHP-CGI :

1. Après que php-cgi ait modifié la configuration de php.ini, vous devez redémarrer php-cgi pour que le nouveau php-ini prenne effet. être redémarré en douceur.

2. Si vous tuez directement le processus php-cgi, php ne pourra pas s'exécuter (PHP-FPM et Spawn-FCGI n'ont pas ce problème, le processus démon régénérera en douceur les nouveaux processus enfants).

4), Spawn-FCGI

Spawn-FCGI est un serveur de gestion FastCGI général. Il fait partie de lighttpd. De nombreuses personnes utilisent Lighttpd pour effectuer la gestion. fonctionne en mode FastCGI, mais il présente de nombreux défauts. L'émergence de PHP-FPM a quelque peu atténué certains problèmes, mais PHP-FPM présente l'inconvénient de devoir être recompilé, ce qui peut entraîner des risques considérables (voir) pour certains environnements déjà en cours d'exécution. PHP peut être utilisé directement dans PHP 5.3.3. -FPM.

Spawn-FCGI est désormais devenu un projet distinct, plus stable et apportant plus de commodité à la configuration de nombreux sites Web. De nombreux sites l'ont associé à nginx pour résoudre des pages Web dynamiques. Le dernier lighttpd n'inclut pas cette pièce (http://www.lighttpd.net/search?q=Spawn-FCGI), mais elle peut être trouvée dans les versions précédentes. Il est inclus dans la version lighttpd-1.4.15

(http://www.lighttpd.net/download/lighttpd-1.4.15.tar.gz L'adresse de téléchargement actuelle de Spawn-FCGI est). http ://redmine.lighttpd.net/projects/spawn-fcgi, la dernière version est http://www.lighttpd.net/download/spawn-fcgi-1.6.3.tar.gz.

REMARQUE :

Pour la dernière version de Spawn-FCGI, vous pouvez rechercher "Spawn-FCGI" sur le site Web lighttpd.net pour trouver l'adresse de sa dernière version.

5), Comparez Spawn-FCGI

PHP-FPM est très pratique à utiliser, la configuration est dans le fichier PHP-FPM.ini, et le démarrage et le redémarrage peuvent se faire depuis php/ sbin /PHP-FPM. Ce qui est plus pratique, c'est qu'après avoir modifié php.ini, vous pouvez directement utiliser le rechargement PHP-FPM pour le charger. Vous pouvez terminer la modification et le chargement de php.ini sans tuer le processus

Les résultats montrent que l'utilisation. PHP-FPM peut apporter de nombreux changements aux performances de PHP. La vitesse de recyclage du processeur du processus contrôlé par PHP-FPM est relativement lente et la mémoire est allouée uniformément.

Le CPU du processus contrôlé par Spawn-FCGI chute rapidement et l'allocation de mémoire est inégale. De nombreux processus semblent non alloués, tandis que d’autres sont très occupés. Cela peut être dû à une répartition inégale des tâches de processus. Cela entraîne également une diminution de la vitesse de réponse globale. La répartition raisonnable de PHP-FPM conduit à évoquer la réponse globale et la moyenne des tâches.

2. Configuration Nginx+PHP

1. Optimisation du numéro de processus

pm = dynamique

pm.max_children = 300

pm .start_servers = 20

pm.min_spare_servers = 5

pm.max_spare_servers = 35

2. Optimisation du nombre maximum de requêtes

pm.max_requests = 10240

REMARQUE :

Ceci est utilisé pour traiter les fuites de mémoire causées par l'analyseur PHP ou les bibliothèques tierces référencées.

Nombre maximum de requêtes : fait référence au nombre de requêtes qu'un processus de travail php-fpm peut traiter avant d'être terminé.

3. Optimisation du temps d'exécution maximum (php.ini)

request_terminate_timeout = 20

REMARQUE :

Ceci est utilisé pour gérer le temps d'exécution de PHP. solution à l'erreur 502 due à une longueur excessive.

Cette configuration de durée peut être configurée dans php.ini (max_execution_time) ou php-fpm.conf Afin de ne pas affecter la configuration globale, elle peut être implémentée dans php-fpm.conf.

Il convient de noter qu'il doit être configuré en conjonction avec max_fail (agrandi) et fail_timeout (ajusté plus petit) dans nginx.conf.

nginx.conf :

emplacement ~ .php$ {

fastcgi_connect_timeout 180;

fastcgi_read_timeout 600 ;

fastcgi_send_timeout 600;

}

REMARQUE :

Le temps d'exécution maximum du script défini par PHP-FPM est déjà assez long, mais lors de l'exécution du script PHP fastidieux, il a été constaté que l'erreur Nginx s'est transformée en une erreur 504 . En effet, nous n'avons modifié que la configuration PHP et Nginx a également une configuration factcgi_connect/read/send_timeout concernant le délai d'expiration de communication avec le serveur en amont.

4. Dépannage de l'utilisation élevée du processeur php-fpm

commande top :

Après avoir exécuté directement la commande top, entrez 1 pour voir l'utilisation du processeur de chaque cœur :


Commande sar :

Installation des commandes sar et iostat :

sysstat.x86_64 : Les commandes de surveillance du système sar et iostat

yum install -y sysstat.x86_64

Exécution :

$sar -P ALL 1 100

REMARQUE :

-P ALL signifie surveiller tous les cœurs ;

1 signifie collecter toutes les 1 secondes ;

100 signifie collecter 100 fois

5, activer la journalisation lente

🎜>

slowlog = log/$pool.log.slow

request_slowlog_timeout = 2

REMARQUE :

Ce qui précède est le journal lent de l'activation de php-fpm, le seuil de temps est de 2 secondes

Exécution :

grep -v "^$" php.slow.log | cut -d " " -f 3,2 | sort |uniq -c | sort -k1,1nr | head -n 50

REMARQUE :

trier : trier les mots

uniq -c : Afficher la seule ligne, et ajouter le nombre de fois que cette ligne apparaît dans le fichier au début de chaque ligne

sort -k1,1nr : Trier par le premier champ, valeur et dans ordre inverse

head –n 10 : Obtenez les 10 premières lignes de données

PS :

Le but de l'activation du journal lent est de suivre et d'analyser quel script php le temps d'exécution dépasse le temps request_slowlog_timeout défini, si ce temps défini est dépassé, le script sera enregistré.

3. Le fonctionnement de Php-Fpm

php-fpm sous PHP5.3.3 ne prend plus en charge l'ancien /usr/local/php/sbin/php-fpm(start |stop| reload) et d'autres commandes doivent utiliser le contrôle des signaux :

Le processus maître peut comprendre les signaux suivants :

INT, TERM se termine immédiatement

QUIT se termine en douceur ; >

USR1 rouvre le fichier journal ;

USR2 recharge en douceur tous les processus de travail et recharge la configuration et les modules binaires ;

Exemple :

php-fpm ferme : kill - INT`cat /usr/local/php/var/run/php-fpm.pid`

php-fpm Redémarrage : kill -USR2`cat /usr/local/php/var/run/php -fpm .pid`

Afficher le nombre de processus php-fpm :

$ps aux | grep -c php-fpm

Apprentissage recommandé : "

Tutoriel vidéo PHP

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!

Étiquettes associées:
source:csdn.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal