Maison  >  Article  >  développement back-end  >  Fichier de configuration php-fpm.conf Descriptions des paramètres chinois et importants

Fichier de configuration php-fpm.conf Descriptions des paramètres chinois et importants

coldplay.xixi
coldplay.xixiavant
2020-08-08 16:47:112814parcourir

Fichier de configuration php-fpm.conf Descriptions des paramètres chinois et importants

workflow php-fpm

php-fpm Le le nom complet est PHP FastCGI Process Manager

Après le démarrage de php-fpm, il lira d'abord php.ini, puis lira le fichier de configuration de conf correspondant. La configuration de conf peut remplacer la configuration de php.ini.

Après avoir démarré php-fpm, un processus maître sera créé pour écouter le port 9000 (configurable). Le processus maître créera plusieurs sous-processus basés sur fpm.conf/www.conf. sont utilisés pour gérer les affaires réelles.

Lorsqu'un client (tel que nginx) se connecte au port 9000, le processus enfant inactif l'acceptera tout seul. Si tous les processus enfants sont occupés, la nouvelle connexion à accepter sera mise dans la file d'attente par le. master. , en attendant que le sous-processus fpm soit inactif ;

La longueur de la file d'attente qui stocke les semi-connexions à accepter est configurée par Listen.backlog.

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

Tous les chemins relatifs dans la configuration sont relatifs à l'installation du chemin php .

En plus du fichier de configuration php-fpm.conf, il existe généralement d'autres fichiers de configuration *.conf (ou non, configurez directement dans php-fpm.conf) pour configurer les pools de processus et différents pools de processus peuvent être exécutés par différents utilisateurs, écoutent différents ports et gèrent différentes tâches ; plusieurs pools de processus partagent une configuration globale.

include=/opt/remi/php56/root/etc/php-fpm.d/*.conf Chargez d'autres fichiers de configuration.

Description chinoise des paramètres de configuration globaux de php-fpm :

pid = /opt/remi/php56/root/var/run/php-fpm/php-fpm.pid
Fichier de processus #pid, la valeur par défaut est aucun.

error_log = /opt/remi/php56/root/var/log/php-fpm/error.log
#Emplacement du journal des erreurs, par défaut : chemin d'installation #INSTALL_PREFIX#/log/php-fpm. enregistrer. S'il est défini sur syslog, le journal sera envoyé au service syslogd sans être écrit dans le fichier.

syslog.facility = daemon
#Écrivez le journal dans le journal système Linux n'est pas encore assez familier, alors ignorez-le pour l'instant.

syslog.ident = php-fpm
#Indicateur de journal système. Si plusieurs processus fpm sont en cours d'exécution, vous devez l'utiliser pour distinguer à qui appartient le journal.

log_level = notice
#Niveau de journalisation, notification par défaut, facultatif : alerte, erreur, avertissement, notification, debug

emergency_restart_threshold = 60
#Avec le paramètre d'urgence_restart_interval suivant

emergency_restart_interval = 60s
#Si dans le délai défini par ce paramètre, le nombre de processus enfants avec SIGSEGV ou SIGBUS dépasse la valeur définie par le paramètre Emergency_restart_threshold, alors fpm redémarrera normalement. Une valeur de 0 signifie désactivé. cette fonction, les unités disponibles sont : s secondes, m minutes, h heures, d jours.

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. Je comprends cela tous les jours. Cela signifie-t-il qu'il ne peut pas être réutilisé après cette heure ?

process.max = 128
#Lors de la gestion dynamique des processus enfants, fpm peut créer le nombre maximum de processus. 0 signifie aucune limite. Il s'agit du nombre total de processus enfants que tous les pools de processus peuvent démarrer. A utiliser avec prudence.

process.priority = -19
# Définir la priorité du processus enfant, qui est efficace lorsque le processus maître est démarré en tant qu'utilisateur root s'il n'est pas défini, le processus enfant héritera de la priorité de ; le processus maître, la plage de valeurs - 19 (la plus élevée) à 20 (la plus basse), non définie par défaut.

daemonize = yes
#Défini sur no pour le débogage des bugs, la valeur par défaut est oui.

rlimit_files = 1024
#Définissez le nombre maximum de fichiers que le processus maître peut ouvrir. La valeur par défaut est la valeur système.

rlimit_core = 0
#Master process core rlimit valeur limite ; facultatif illimité ou un nombre entier >=0, la valeur par défaut est la valeur du système.

events.mechanism = epoll
#Mécanisme de traitement des événements, détection automatique par défaut, valeurs optionnelles : select, poll, epoll (linux>=2.5.44), kqueue, /dev/poll, port

systemd_interval = 10s
#Lorsque fpm est défini comme service système, à quelle fréquence l'état est signalé au serveur, les unités sont s, m, h.

Pool de configuration du pool de processus php-fpm Définitions :

Vous pouvez y exécuter n'importe quoi sous différents ports d'écoute et différentes options de gestion. il n'y a pas de limite au nombre de pools ;

Le nom du pool est utilisé pour les journaux et les statistiques.

user = apache

group = apache

#Exécutez pool fpm avec les autorisations de quel utilisateur et groupe.

Utilisez Apache pour accéder à certains répertoires comme le service httpd

listen = 127.0.0.1:9000
#L'adresse IP et le port d'écoute peuvent être /path/to/unix/socket Pour surveiller socket unix, les performances sont meilleures.

listen.backlog = 65535
#Taille de file d'attente de socket non acceptée, -1 sur FreeBSD et OpenBSD, 65535 par défaut sur d'autres plates-formes, important lorsque la concurrence est élevée, des paramètres raisonnables traiteront les requêtes en file d'attente en temps opportun ; Il y a trop de retard dans la conférence. Après le traitement, nginx attend l'expiration du délai et déconnecte la connexion socket avec fpm, ce qui est un échec. N'utilisez pas -1, il est recommandé d'être supérieur à 1024, de préférence une puissance de 2.

#Un pool partage une file d'attente de backlog, et tous les processus du pool vont dans cette file d'attente pour accepter les connexions.

#Le nombre maximum est limité par la configuration du système cat /proc/sys/net/core/somaxconn, modification de la configuration du système : vim /etc/sysctl.conf, ajoutez net.core.somaxconn = 2000, le maximum est 2000 , puis php L'arriéré maximum peut aller jusqu'à 2000.

listen.owner = apache

listen.group = apache

listen.mode = 0660

#Lorsque vous utilisez la méthode de connexion socket, spécifiez l'unix socket L'utilisateur avec les autorisations est le même que l'utilisateur en cours d'exécution par défaut ; lors de l'utilisation d'une connexion TCP, vous pouvez commenter

listen.allowed_clients = 127.0.0.1
#Définissez l'adresse à laquelle vous pouvez vous connecter fpm, par exemple, nginx se connectera, plusieurs adresses sont séparées par des virgules. Si elles ne sont pas configurées, n'importe quelle adresse peut être connectée par défaut.

process.priority = -19
#Les autorisations du processus pool nécessitent également que le processus maître soit l'utilisateur root. C'est la même chose que celle globale. Si elle n'est pas définie, la priorité du. le processus maître sera hérité.

pm = dynamique
# Méthode de gestion des processus enfants au démarrage, valeurs facultatives : statique (créer un numéro précisé au démarrage), dynamique (créer selon la situation au démarrage, au moins un), à la demande ( start Les processus enfants ne sont pas créés en cas de besoin et le seront uniquement en cas de besoin)

pm.max_children = 5
# Ce pool peut avoir jusqu'à 5 processus en même temps, et les trois méthodes de gestion doit être configuré

pm. start_servers = 2
#Créer 2 sous-processus au démarrage de fpm, applicable uniquement à la gestion dynamique dynamique

pm.min_spare_servers = 2
#Au moins 2 sous-processus seront maintenus lorsque le serveur est inactif. Si ce nombre n'est pas suffisant, il créera, applicable uniquement à la méthode de gestion dynamique dynamique

pm.max_spare_servers = 3
# Il doit y en avoir à la plupart des serveurs lorsqu'ils sont inactifs, s'il y en a plus, ils seront tués, applicable uniquement à la méthode de gestion dynamique dynamique

pm .process_idle_timeout = 10s
#Le processus enfant sera tué après avoir été inactif pendant 10 secondes .

pm.max_requests = 500
#Chaque processus enfant sera recyclé après avoir traité un maximum de 500 requêtes, ce qui peut éviter les fuites de mémoire.

pm.status_path string

# URL de la page d'état FPM. Si cette option n'est pas définie, la page d'état n'est pas accessible. Par défaut : Aucun.

ping.path string

#L'URL ping de la page de surveillance FPM. Si elle n’est pas définie, la page ping n’est pas accessible. Cette page est utilisée pour détecter en externe si le FPM est actif et capable de répondre aux demandes. Notez qu'il doit commencer par une barre oblique (/).

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

process.priority int
#Définissez la priorité nice(2) du travailleur (si définie). La valeur va de -19 (priorité la plus élevée) à 20 (priorité la plus faible). Valeur par défaut : Ne pas définir

chaîne de préfixe
#Le préfixe utilisé lors de la détection du chemin

access.log = var/log/$pool.access.log
#Access file log , est de peu d'utilité. Par exemple, yii2 enregistre l'accès à index.php à chaque fois, mais n'enregistre que le vrai fichier PHP.

slowlog = var/log/$pool.log.slow
#Le journal d'exécution du fichier PHP trop lent enregistrera avec précision quelle ligne de code est trop lente Ceci est très utile lors de la configuration du. temps.

request_slowlog_timeout = 2s
#Des journaux lents seront écrits si ce temps d'exécution est dépassé

request_terminate_timeout = 3s
#Le délai d'attente pour une seule requête, parfois l'exécution maximale définie par php.ini Si le délai n'a pas pris effet, cela tuera la requête qui a mis trop de temps à s'exécuter.

rlimit_files = 1024
#Nombre maximum de handles ouverts, la valeur par défaut est la valeur système.

rlimit_core = 0
#Le nombre maximum de cœurs utilisés, la valeur par défaut est l'allocation système.

chroot = /path
#Le chemin doit être un chemin absolu. La modification du répertoire du processus enfant peut isoler la lecture et l'écriture du système de fichiers par le processus du système de fichiers réel du système d'exploitation, qui est bon pour la sécurité.

chdir = /var/www

#Changez le répertoire de travail actuel, vous pouvez utiliser un chemin relatif, la valeur par défaut est le répertoire courant ou chroot.

catch_workers_output = yes
#Rediriger la sortie standard stdout et l'erreur standard stderr vers le journal des erreurs principal S'ils ne sont pas définis, ces deux journaux seront dirigés vers /dev/null dans des conditions de charge élevée. entraînera un retard de la page de plusieurs millisecondes et n'est pas activé par défaut.

clear_env = no
#S'il faut effacer les variables d'environnement lors de la création du processus de travail, si oui, alors le processus enfant getenv() ne pourra pas accéder à $_ENV et $_SERVER.

security.limit_extensions = .php .php3 .php4 .php5
#Pour des raisons de sécurité, limitez le suffixe de script pouvant être exécuté

#Spécifiez une configuration php.ini supplémentaire pour le pool actuel , comme Spécifier où le journal des erreurs du pool actuel est écrit

php_value/php_flag
#Vous pouvez définir le contenu de php.ini, qui peut être écrasé par ini_set

php_admin_value /php_admin_flag
#C'est la même chose que ci-dessus, mais ne sera pas écrasé par ini_set.

# Lorsque l'indicateur est défini, la valeur ne peut être que activée, désactivée, 1, 0, vrai, faux, oui ou non, d'autres types de valeurs doivent utiliser la valeur.

php_flag[display_errors] = off

php_admin_value[error_log] = /var/log/fpm-php.www.log

php_admin_flag[log_errors] = on

php_admin_value[memory_limit] = 32M

#Lors de la définition de `disable_functions` et `disable_classes` dans cette méthode, les paramètres de php.ini ne seront pas écrasés, mais seront uniquement ajoutés.

Remarque : les valeurs de configuration PHP​​sont définies via php_value ou php_flag et écraseront la valeur précédente.
Les valeurs de Disable_functions ou Disable_classes définies dans le php.ini ne seront pas écrasées, mais les nouveaux paramètres seront ajoutés aux valeurs d'origine.
La valeur définie à l'aide de php_admin_value ou php_admin_flag ne peut pas être remplacée par ini_set() dans le code PHP.

Depuis la version 5.3.3, les paramètres PHP peuvent également être définis via le serveur web.

nginx communique avec php-fpm via unixsock :

Scénario applicable : nginx et php-fpm sont sur le même serveur Dans ce cas, la communication inter-processus unixsocket. peut être utilisé directement, sans utiliser la communication par port TCP, vous pouvez gagner du temps pour créer une connexion, améliorant ainsi les performances.

1. Définissez l'écoute de php-fpm sur /opt/remi/php56/root/var/run/php-fpm/php567-fpm.sock (un chemin relatif peut être utilisé), puis redémarrez fpm. et il créera automatiquement le fichier php567-fpm.sock

2. Modifiez le paramètre fastcgi_pass de nginx en unix:/opt/remi/php56/root/var/run/php-fpm/php567-fpm. sock ; via php567- Pour communiquer avec fpm, le fichier fpm.sock doit s'assurer que nginx a l'autorisation d'accéder au fichier php567-fpm.sock.

Résumé :

Le fichier sock peut être créé n'importe où, à condition que fpm ait l'autorisation d'écrire le fichier dans ce répertoire et que nginx ait l'autorisation de le lire. La connexion TCP sera plus stable car le protocole TCP garantit l'exactitude des données, mais sock a moins de copies de données et de changements de contexte et consomme moins de ressources. Cependant, sock ne peut être utilisé que lorsque nginx et fpm sont sur la même machine.

Surveillance de l'état du processus php-fpm

1 Configuration nginx : lorsque vous rencontrez des demandes d'état, transmettez-les directement à php

emplacement ~^/status$ {

fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;

include fastcgi_params;

fastcgi_pass 127.0.0.1:9000 ;

}

2. Configuration de fpm : pm.status_path = /status

3. Redémarrez ensuite fpm et nginx, et vous pourrez le voir en y accédant dans le navigateur :

Les résultats sont affichés en texte/plain par défaut Vous pouvez passer le paramètre ?json/html/xml pour obtenir les résultats en json et dans d'autres formats respectivement ; full peut afficher les détails de chaque sous-processus

nom du pool de processus du pool

méthode de gestion des processus du gestionnaire de processus

heure de début du démarrage du processus

début depuis combien de secondes le processus est en cours d'exécution

conn accepté Combien de connexions ont été acceptées dans ce pool au total

file d'attente d'écoute Le nombre de connexions en attente d'acceptation

max file d'attente d'écoute Après le démarrage de fpm, le plus grand nombre de connexions en attente d'acceptation dans l'historique

listen queue len La longueur maximale de la file d'attente d'écoute configurée est limitée par `listen.backlog` et le système `cat /proc/ sys/net/core/somaxconn`, quelle que soit la valeur minimale

processus inactifs inactifs Nombre de processus

processus actif Le nombre de processus de travail (avec des restrictions, il s'agit du nombre total d'enfants processus)

processus totaux Le nombre total de processus enfants

processus actifs maximum Après le démarrage de fpm, le nombre maximum de processus fonctionnant simultanément dans l'historique

enfants maximum atteint Lorsque le le mode de gestion des processus est « dynamique » et « à la demande », cette valeur est le nombre de fois que le maître crée plus de processus enfants lorsqu'il n'y a pas assez de processus enfants

requêtes lentes Le nombre de requêtes lentes

<.>paramètre complet

ID du sous-processus pid ;

état du sous-processus d'état (inactif, en cours d'exécution, ... ;

durée de la demande Le nombre de nanosecondes de la demande prend ;

méthode de requête méthode de requête (GET, POST, ...);

paramètre de requête URI de requête;

longueur du contenu requête POST, la longueur du contenu demandée;

user - l'utilisateur (PHP_AUTH_USER) (ou '-' s'il n'est pas défini);

script quel fichier php est demandé;

dernière requête cpu Les ressources CPU consommées par le dernière requête

dernière requête mémoire La consommation maximale de mémoire de la dernière requête

Si le processus est inactif, alors cette information est enregistrée Les données pertinentes de cette requête, sinon ce sont les données pertinentes de cette demande actuelle.

Problèmes de configuration du backlog

Un sous-processus fpm ne peut gérer qu'une seule requête à la fois. Si le backlog est trop important, les requêtes initiées par des clients tels que nginx n'auront jamais de fpm. sous-processus. Lors de l'acceptation, nginx déconnectera directement la connexion lorsque fpm est occupé puis acceptera, il sera constaté qu'il est déconnecté, donc une erreur sera signalée. Si le retard est trop petit, lorsque le nombre d'accès est important, tous les sous-processus fpm seront occupés, le retard sera plein et les nouvelles connexions seront rejetées. À ce moment-là, si nginx le demande à nouveau, il le fera. être directement rejetée. Par conséquent, les paramètres du retard doivent être définis de manière appropriée.

Tant que les valeurs par défaut du système sont utilisées pour la plupart des paramètres, nous n'avons besoin de connaître que quelques réglages de paramètres plus importants. Lorsqu'ils sont utilisés, nous pouvons consulter les instructions pertinentes

.

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