Introduction à la configuration des paramètres php-fpm et explication détaillée de l'optimisation des paramètres sous Linux

jacklove
Libérer: 2023-04-02 21:10:02
original
2170 Les gens l'ont consulté

Cet article explique principalement la description détaillée en chinois de certains paramètres importants de php-fpm sous Linux, et présente en détail l'optimisation des paramètres de php-fpm en termes de performances

php -fpm Explication détaillée des paramètres importants du paramètre .conf

pid = run/php-fpm.pid
#pid, la valeur par défaut est var/run /php dans le répertoire d'installation -fpm.pid, il est recommandé d'activer

error_log = log/php-fpm.log
# Journal des erreurs, la valeur par défaut est var/log /php-fpm.log dans le répertoire d'installation

log_level = notice
#Error Les niveaux disponibles sont : alerte (doit être traité immédiatement), erreur (situation d'erreur), avertissement (situation d'avertissement), avis (informations générales importantes), debug (informations de débogage). Par défaut : avis.

emergency_restart_threshold = 60
emergency_restart_interval = 60s

#Indique que une erreur SIGSEGV ou SIGBUS se produit dans la valeur définie par Emergency_restart_interval. Si le nombre de processus php-cgi dépasse Emergency_restart_threshold, php-fpm redémarrera normalement. Ces deux options restent généralement à leurs valeurs par défaut.

process_control_timeout = 0
#Définissez le délai d'attente pour que le processus enfant accepte le signal de réutilisation du processus principal Unités disponibles : s (secondes), m (minutes), h (heures). ), Ou d (jours) Unité par défaut : s (secondes). Valeur par défaut : 0.

daemonize = yes
#Exécuter fpm en arrière-plan, la valeur par défaut est oui , si c'est pour le débogage, il peut changer en non. Dans FPM, il est possible d'exécuter plusieurs pools de processus avec des paramètres différents. Ces paramètres peuvent être définis individuellement pour chaque pool de processus.

listen = 127.0.0.1:9000
#fpm port d'écoute, qui est l'adresse traitée par php dans nginx, généralement la valeur par défaut est suffisante. Les formats disponibles sont : 'ip:port', 'port', '/path/to/unix/socket'. Chaque pool de processus doit être défini.

listen.backlog = -1Numéro #Backlog, -1 signifie illimité, déterminé par le système d'exploitation, il suffit de commenter cette ligne.

listen.allowed_clients = 127.0.0.1#Autoriser l'accès à l'IP du processus FastCGI Définissez any pour ne pas restreindre l'IP si vous souhaitez configurer nginx sur d'autres. hôtes, vous pouvez également accéder à ce processus FPM, l'écoute doit être définie sur une adresse IP locale accessible. La valeur par défaut est quelconque. Chaque adresse est séparée par une virgule. Si elle n'est pas définie ou est vide, tout serveur est autorisé à demander une connexion

listen.owner = wwwlisten.group = www
listen.mode. = 0666
#options de configuration du socket unix, si vous utilisez TCP pour y accéder, commentez simplement ici.

user = wwwgroup = www
# Compte et groupe pour démarrer le processus

pm = dynamique # Pour les serveurs dédiés, pm peut être défini sur statique.
#Comment contrôler le processus enfant, les options sont statiques et dynamiques. Si statique est sélectionné, un nombre fixe de processus enfants est spécifié par pm.max_children. Si dynamique est sélectionné, il est déterminé par les paramètres suivants :

pm.max_children #, Nombre maximum de processus enfants
pm.start_servers #, nombre de processus à startup
pm.min_spare_servers #, pour garantir le nombre minimum de processus inactifs est inférieur à cette valeur, créez un nouveau processus enfant
pm.max_spare_servers #, pour garantir le nombre de processus inactifs Valeur maximale, si le processus inactif est supérieur à cette valeur, cela sera nettoyé

pm.max_requests = 1000#Set le nombre de requêtes servies avant la renaissance de chaque processus enfant. Pour d'éventuelles fuites de mémoire. C'est très utile pour les modules tiers. Si défini sur '0', les requêtes seront toujours acceptées. .

pm.status_path = /status#L'URL de la page d'état FPM Si elle n'est pas définie, la page d'état n'est pas accessible. Valeur par défaut : aucune. utilisez

ping.path = /ping#L'URL ping de la page de surveillance FPM Si elle n'est pas définie, la page ping n'est pas accessible. détecter en externe si FPM est vivant et peut répondre aux demandes. Veuillez noter qu'il doit commencer par une barre oblique (/).

ping.response = pong# Utilisé pour définir la réponse de retour de la requête ping Le texte renvoyé/texte au format brut est HTTP 200. Valeur par défaut : pong.

request_terminate_timeout = 0

#Définir le délai d'abandon pour une seule requête. Cette option peut être utile pour les scripts où le 'max_execution_time' dans le paramètre php.ini n'interrompt pas l'exécution des scripts. pour des raisons particulières, le réglage « 0 » signifie « Désactivé ». Vous pouvez essayer de modifier cette option lorsque des erreurs 502 se produisent fréquemment.

request_slowlog_timeout = 10s

#Lorsqu'une requête définit le délai d'attente, les informations correspondantes de la pile d'appels PHP seront entièrement écrites dans le journal lent. Définir sur '0' signifie 'Désactivé'. '

slowlog = log/$pool.log.slow
#Journal des requêtes lentes, utilisé avec request_slowlog_timeout

rlimit_files = 1024
#Set la limite rlimit du descripteur d'ouverture de fichier. Valeur par défaut : la valeur définie par le système du handle d'ouverture par défaut est 1024, qui peut être visualisée avec ulimit -n et modifiée avec ulimit -n 2048.

rlimit_core = 0
#Définissez la valeur limite maximale du noyau rlimit Valeurs disponibles : "illimité", 0 ou entier positif : valeur définie par le système.

chroot =
Répertoire #Chroot au démarrage. Le répertoire défini doit être un chemin absolu S'il n'est pas défini, chroot ne sera pas utilisé.

chdir. =
#Définissez le répertoire de démarrage, vers lequel sera automatiquement redirigé lors du démarrage. Le répertoire défini doit être un chemin absolu : répertoire actuel, ou /directory (lors du chrooting)

catch_workers_output = yes#Redirect stdout et stderr pendant le processus en cours vers le fichier journal des erreurs principal S'ils ne sont pas définis, stdout et stderr seront redirigés vers /dev/null selon les règles FastCGI par défaut. Valeur : vide.

Réglage des paramètres php-fpm

pm = dynamique

Indique quelle méthode de gestion du numéro de processus est utilisée


dynamiqueIndique que le nombre de processus php-fpm est dynamique, en commençant par le nombre spécifié par pm.start_servers .S'il y a beaucoup de demandes, il sera automatiquement augmenté pour garantir que le nombre de processus inactifs n'est pas inférieur à pm.min_spare_servers. Si le nombre de processus est important, il sera nettoyé en conséquence pour garantir que le nombre de processus redondants. n'est pas supérieur à pm.max_spare_servers

static signifie que le nombre de processus php-fpm est statique. Le nombre de processus est le nombre spécifié par pm.max_children du début à la fin, et n'augmentera ou ne diminuera plus

pm.max_children = 300;Le nombre de processus php-fpm démarrés en mode statique
pm.start_servers = 20; >Le nombre de processus de démarrage php-fpm démarrés en mode dynamiquepm.min_spare_servers = 5;
Le nombre minimum de processus php-fpm en mode dynamiquepm.max_spare_servers = 35 ;
Le nombre maximum de processus php-fpm en mode dynamiqueSi pm est statique, alors en fait, seul le paramètre pm.max_children prend effet. Le système ouvrira un nombre défini de processus php-fpm

Si pm est 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 les processus php-fpm pm.start_servers 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

Ensuite, pour notre serveur, quelle méthode PM est la meilleure ? En fait, tout 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 passera à 20-30 Mo après une exécution 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é. Parce que les changements fréquents du processus php-fpm entraîneront un décalage, donc si la mémoire est suffisamment grande, l'effet statique sera meilleur. La quantité peut également être obtenue en fonction 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 sur 2G-3G. Si la mémoire est légèrement plus petite, par exemple 1 Go, spécifier 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 le mode dynamique, car le mode dynamique mettra fin aux processus redondants et peut recycler et libérer de la mémoire, il est donc recommandé de l'utiliser sur des serveurs ou des 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 est comprise entre 5 et 10.

Sur un serveur avec mémoire 4G, 200 suffisent (pour ma machine de test 1G, 64 est le meilleur. Il est recommandé d'utiliser un test de stress pour obtenir le meilleur rapport qualité-prix)

pm. max_requests = 10240;

Le plus gros problème lors du processus de configuration de nginx php-fpm est la fuite interne : la charge sur le serveur n'est pas importante, mais l'utilisation de la mémoire augmente rapidement, puis commence à consommer la partition d'échange, et. le système se bloque rapidement ! En fait, selon l'introduction officielle, php-cgi n'a pas de fuite de mémoire. Une fois chaque requête terminée, php-cgi récupérera la mémoire, mais ne la libérera pas pour le système d'exploitation. Cela entraînera une grande quantité de mémoire. être occupé par php-cgi.

La solution officielle est de baisser la valeur de PHP_FCGI_MAX_REQUESTS. Si vous utilisez php-fpm, le php-fpm.conf correspondant est max_requests. Cette valeur indique le nombre de requêtes qui seront envoyées avant le redémarrage du thread. , nous devons réduire cette valeur de manière appropriée pour permettre à php-fpm de libérer automatiquement de la mémoire. Ce n'est pas 51200 et ainsi de suite comme le disent la plupart des gens sur Internet. En fait, il y a une autre valeur max_children qui y est liée à chaque fois. php-fpm Combien de processus seront créés, de sorte que la consommation réelle de mémoire soit de max_children*max_requests*memory utilisée par chaque requête. Sur cette base, nous pouvons estimer l'utilisation de la mémoire, il n'est donc pas nécessaire d'écrire un script pour tuer.

request_terminate_timeout = 30;

Durée d'exécution maximale, qui peut également être configurée dans php.ini (max_execution_time)

request_slowlog_timeout = 2 ; Activer le journal lent
slowlog = log/$pool.log.slow Chemin du journal lent

rlimit_files = 1024; Ajouter php-fpm Limitations sur l'ouverture des descripteurs de fichiers

Les paramètres de php-fpm.conf sont clairement indiqués et vous devriez pouvoir vous en souvenir tant que vous les lisez plusieurs fois. Quant au plan de performances de php-fpm, il. doit être déterminé en fonction de la situation réelle et testé plusieurs fois. Obtenez la meilleure solution de configuration

Articles qui pourraient vous intéresser :

Étapes détaillées pour les données. migration et remplissage des données dans Laravel

Explication sur la différence entre l'acquisition de fermeture PHP de variables externes et la déclaration globale de mots-clés de variables

Explication détaillée de l'utilisation d'anyproxy pour améliorer l'efficacité de la collecte d'articles de comptes publics

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!

source:php.cn
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