Maison  >  Article  >  développement back-end  >  La méthode de gestion et d'optimisation des processus php-fpm utilisée par Nginx

La méthode de gestion et d'optimisation des processus php-fpm utilisée par Nginx

coldplay.xixi
coldplay.xixiavant
2020-08-08 16:51:432355parcourir

La méthode de gestion et d'optimisation des processus php-fpm utilisée par Nginx

PS : lors de la configuration de php-fpm il y a quelque temps, j'ai accidentellement découvert qu'il disposait de deux méthodes de gestion de processus. Semblable à Apache, son nombre de processus peut également être divisé en dynamiques et statiques selon les paramètres.

php-fpm possède actuellement deux branches principales, correspondant à la version php-5.2.x et à la version php-5.3.x. Dans la version 5.2.x, php-fpm.conf utilise le format XML, mais dans la nouvelle version 5.3.x, il a le même style de configuration que php.ini.
Dans la version 5.2.x, php-fpm.conf aurait deux styles de gestion des processus, l'un est statique et l'autre de type Apache.

Recommandations d'apprentissage associées : programmation php (vidéo)

Le code est le suivant :

Process manager settings
<value name=”pm”>
Sets style of controling worker process count.
Valid values are &#39;static&#39; and ‘apache-like&#39;
<value name=”style”>static</value>

Suivez Selon le document, si le style de pm adopte apache-like, le nombre de processus démarrés doit être le même que celui spécifié par StartServers. Cependant, après plusieurs tentatives, vous constaterez que la configuration du style de PM sur celui d'Apache n'a aucun effet. En d’autres termes, le type Apache n’a pas été implémenté ici.
Cependant, dans la dernière version 5.3.x prenant en charge php-fpm, une gestion des processus de style Apache a été implémentée.

Le code est le suivant :

; Choose how the process manager will control the number of child processes.
; Possible Values:
; static - a fixed number (pm.max_children) of child processes;
; dynamic - the number of child processes are set dynamically based on the
; following directives:
; pm.max_children - the maximum number of children that can
; be alive at the same time.
; pm.start_servers - the number of children created on startup.
; pm.min_spare_servers - the minimum number of children in &#39;idle&#39;
; state (waiting to process). If the number
; of &#39;idle&#39; processes is less than this
; number then some children will be created.
; pm.max_spare_servers - the maximum number of children in &#39;idle&#39;
; state (waiting to process). If the number
; of &#39;idle&#39; processes is greater than this
; number then some children will be killed.
; Note: This value is mandatory.
;pm = dynamic
pm = static

Comme le montre le paragraphe ci-dessus, il existe deux styles de gestion de processus : statique et dynamique. La gestion des processus est en fait la même que celle de la version précédente, sauf que le type Apache est modifié en dynamique, ce qui est plus facile à comprendre.

S'il est défini sur statique, le nombre de processus php-fpm sera toujours le nombre spécifié par pm.max_children et n'augmentera ni ne diminuera.
S'il est défini sur dynamique, le nombre de processus php-fpm est dynamique. Il commence par le nombre spécifié par pm.start_servers, s'il y a plus de requêtes, il augmentera automatiquement pour garantir que le nombre de processus inactifs ne soit pas inférieur. que pm.min_spare_servers. S'il y a un grand nombre de processus, ils seront nettoyés en conséquence pour garantir que le nombre de processus redondants ne dépasse pas pm.max_spare_servers.

Ces deux méthodes différentes de gestion des processus peuvent être ajustées en fonction des besoins réels du serveur.

Voici quelques paramètres impliqués dans cela. Ce sont pm, pm.max_children, pm.start_servers, pm.min_spare_servers et pm.max_spare_servers.
pm indique quelle méthode utiliser. Vous avez le choix entre deux valeurs, statique ou dynamique. Dans les anciennes versions, dynamique s'appelait apache-like. Veuillez faire attention à la description du fichier de configuration à cet effet.

Les significations des quatre paramètres suivants sont :

Le code est le suivant :

pm.max_children:静态方式下开启的php-fpm进程数量。
pm.start_servers:动态方式下的起始php-fpm进程数量。
pm.min_spare_servers:动态方式下的最小php-fpm进程数量。
pm.max_spare_servers:动态方式下的最大php-fpm进程数量。

Si dm est défini sur statique, alors il n'y a en fait quepm.max_childrenCe paramètre prend effet. Le système démarrera un nombre défini de processus php-fpm.
Si dm est défini sur dynamique, alors le paramètre pm.max_children ne sera pas valide et les trois paramètres suivants prendront effet. Le système démarrera le processus pm.start_servers个php-fpm lorsque php-fpm commencera à s'exécuter, puis ajustera dynamiquement le nombre de processus php-fpm entre pm.min_spare_servers et pm.max_spare_servers en fonction des besoins du système.

Alors, quelle méthode d'exécution est la meilleure pour notre serveur ? En fait, comme Apache, le programme PHP en cours d'exécution aura plus ou moins des fuites de mémoire après son exécution. C'est également la raison pour laquelle un processus php-fpm n'occupe qu'environ 3 Mo de mémoire au début, et il augmentera jusqu'à 20-30 Mo après avoir été exécuté pendant un certain temps.
Pour les serveurs dotés d'une grande mémoire (comme 8 Go ou plus), il est en fait plus approprié de spécifier un max_children statique, car cela ne nécessite pas de contrôle supplémentaire du numéro de processus et améliorera l'efficacité. Étant donné que les changements fréquents du processus php-fpm entraîneront un décalage, il sera préférable d'activer la fonction statique si la mémoire est suffisamment grande.

La quantité peut également être obtenue sur la base de la mémoire/30M. Par exemple, 8 Go de mémoire peuvent être réglés sur 100, puis la mémoire consommée par php-fpm peut être contrôlée à 2G-3G. Si la mémoire est légèrement plus petite, par exemple 1 Go, la spécification d'un nombre statique de processus est plus propice à la stabilité du serveur. Cela peut garantir que php-fpm n'obtient que suffisamment de mémoire et alloue une petite quantité de mémoire à d'autres applications, ce qui rendra le système plus fluide.

Pour un serveur avec une petite mémoire, comme un VPS avec 256 Mo de mémoire, même s'il est calculé sur la base d'une mémoire de 20 Mo, 10 processus php-cgi consommeront 200 Mo de mémoire, et le crash du système devrait être très sérieux. C'est normal. Par conséquent, vous devriez essayer de contrôler autant que possible le nombre de processus php-fpm. Après avoir clarifié grossièrement la mémoire occupée par d'autres applications, lui attribuer un petit nombre statique rendra le système plus stable.

Ou utilisez la méthode dynamique, car la méthode dynamique mettra fin aux processus redondants et pourra recycler et libérer de la mémoire, il est donc recommandé de l'utiliser sur des serveurs ou VPS avec moins de mémoire. Le montant maximum spécifique est obtenu sur la base de la mémoire/20 M. Par exemple, pour un VPS de 512 Mo, il est recommandé de définir pm.max_spare_servers sur 20. Quant à pm.min_spare_servers, il est recommandé de le paramétrer en fonction de la charge du serveur. Une valeur plus adaptée se situe entre 5 et 10.

Recommandations associées : Cours 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