Introduction à la configuration des paramètres php-fpm et aux instructions d'optimisation des paramètres sous les compétences Linux_php

韦小宝
Libérer: 2023-03-17 18:18:01
original
1296 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. Jetons un coup d'œil aux aspects de performances de php-fpm

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

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

error_log = log/php-fpm.log
#Error log, la valeur par défaut est var/log/php-fpm. log

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

emergency_restart_threshold = 60emergency_restart_interval = 60s
#Indique le nombre de php- Processus cgi qui ont des erreurs SIGSEGV ou SIGBUS dans la valeur définie par Emergency_restart_interval. Si Emergency_restart_threshold est dépassé, 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:9000Port d'écoute #fpm, 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
hors de 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 FPM et 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 = www

listen.group = wwwlisten.mode. = 0666

#options de configuration du socket unix, si vous utilisez TCP pour y accéder, commentez simplement ici.

user = www

group = 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 enfantspm.start_servers #
, nombre de processus à startuppm.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. Le 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 #Définissez 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 à l'aide de 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 .

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 le sera pas. utilisé.

chdir =#Définissez le répertoire de démarrage, qui sera automatiquement redirigé vers lors du démarrage. Le répertoire défini doit être une valeur par défaut : répertoire actuel. ou /directory ( chroot)

catch_workers_output = yes#Rediriger 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 basés. sur FastCGI Les règles sont redirigées vers /dev/null. Valeur par défaut : vide.

🎜>

pm = dynamique

indique quelle méthode de gestion des numéros de processus est utilisée.

dynamic

indique que le nombre de processus php-fpm est dynamique, initialement c'est le nombre spécifié par pm.start_servers. S'il y a plus de requêtes, ce 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 excédentaires ne dépasse pas pm.max_spare_servers

static

signifie que le nombre de processus php-fpm est
static

Le nombre de processus est toujours le nombre spécifié par pm.max_children et n'augmentera pas ou ne réduira pas le nombre de. Processus php-fpm démarrés en mode statique

pm.max_children = 300;

pm.start_servers = 20 en mode dynamique Nombre initial de php-fpm processus pm.min_spare_servers = 5;

Nombre minimum de processus php-fpm en mode dynamique

pm.max_spare_servers = 35 Mode dynamique Nombre maximum de processus php-fpm;
Si pm est statique, alors 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 des tests de stress pour obtenir la meilleure valeur)

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, et la mémoire est rapidement consommée et alors la partition de swap est consommée et le système est très Raccrochez ! 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 les descripteurs de fichiers ouverts

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

Recommandations associées :

Explication détaillée de l'exploration du pool de processus PHP-FPM

Exploration du pool de processus PHP-FPM

Présentation de solutions pour réduire PHP -Utilisation de la mémoire FPM

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: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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!