Maison >développement back-end >tutoriel php >Introduction à la configuration des paramètres php-fpm et aux instructions d'optimisation des paramètres sous les compétences Linux_php
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.
#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.group = wwwlisten.mode. = 0666
#options de configuration du socket unix, si vous utilisez TCP pour y accéder, commentez simplement ici.
group = www
# Compte et groupe pour démarrer le processus
# 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é
#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. .
#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
#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 (/).
# 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 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 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. 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 signifie que le nombre de processus php-fpm est pm.max_children = 300; pm.start_servers = 20 en mode dynamique Nombre initial de php-fpm processus pm.min_spare_servers = 5; pm.max_spare_servers = 35 Mode dynamique Nombre maximum de processus php-fpm; 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 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
#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é ». 🎜>
entier positif. valeur définie .
static
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.
slowlog = log/$pool.log.slow; Chemin du journal lent
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!