Les paramètres importants de php-fpm.conf sont expliqués en détail
PID = run/php-fpm.pid #pid设置, il est recommandé d’activer par défaut var/run/php-fpm.pid dans le répertoire d’installation
error_log = log/php-fpm.log #错误日志, par défaut est var/log/php-fpm.log dans le répertoire d’installation
log_level = avis #错误级别. Les niveaux disponibles sont : alerte, erreur, avertissement, avis, débogage. Par défaut : notification.
emergency_restart_threshold = 60 emergency_restart_interval = 60 # indique que si le nombre de processus php-cgi avec des erreurs SIGSEGV ou SIGBUS dépasse emergency_restart_threshold dans la valeur emergency_restart_interval, php-fpm sera redémarré gracieusement. Ces deux options restent généralement la norme par défaut.
process_control_timeout = 0 #设置子进程接受主进程复用信号的超时时间. Unités disponibles : s (secondes), m (minutes), h (heures) ou d (jours) Unités par défaut : s (secondes). Par défaut : 0.
daemonize = oui #后台执行fpm, la valeur par défaut est oui, et si vous voulez déboguer, vous pouvez la changer en non. En FPM, différents paramètres peuvent être utilisés pour exécuter plusieurs pools de processus. Ces réglages peuvent être définis individuellement pour chaque pool de procédés.
écouter = 127.0.0.1:9000 #fpm监听端口, c’est-à-dire l’adresse traitée par PHP dans nginx, est généralement la valeur par défaut. Les formats disponibles sont : 'ip :port', 'port', '/chemin/vers/unix/socket'. Chaque pool de processus doit être mis en place.
listen.backlog = -1 #backlog数, -1 signifie illimité, déterminé par le système d’exploitation, il suffit de commenter cette ligne. Référence : http://www.3gyou.cc/?p=41
listen.allowed_clients = 127.0.0.1 #允许访问FastCGI进程的IP, réglez n’importe quel pour ne pas restreindre l’IP, si vous voulez configurer le nginx des autres hôtes pour accéder à ce processus FPM, vous devez définir l’adresse IP accessible au prix de l’écoute. La valeur par défaut est n’importe qui. Chaque adresse est séparée par une virgule. Si elle n’est pas activée ou vide, n’importe quel serveur peut demander une connexion
écoute.propriétaire = www listen.group = www listen.mode = 0666 #unix option de réglage de socket, si vous utilisez TCP pour y accéder, vous pouvez commenter ici.
utilisateur = www Groupe = www #启动进程的帐户和组
PM = #对于专用服务器 dynamique, PM peut être réglé sur statique. #如何控制子进程, les options sont fixes et dynamiques. Si statique est sélectionné, un nombre fixe de processus enfants est spécifié par pm.max_enfants. Si dynamique est sélectionnée, elle est déterminée par les paramètres suivants : pm.max_enfants #, le nombre maximal de processus enfants pm.start_servers #, le nombre de processus au démarrage pm.min_spare_servers #, garantir un nombre minimum de processus inactifs, et créer un nouveau processus enfant si le processus inactif est inférieur à cette valeur pm.max_spare_servers#, assurez-vous le nombre maximal de processus inactifs, si le processus inactif dépasse cette valeur, cela sera nettoyé
pm.max_requêtes = 1000 #设置每个子进程重生之前服务的请求数. C’est très utile pour les modules tiers qui peuvent avoir des fuites de mémoire. Si elle est réglée à '0', la demande est toujours acceptée. Équivalent à PHP_FCGI_MAX_REQUESTS variables d’environnement. Par défaut : 0.
pm.status_path = /statut #FPM状态页面的网址. Si vous n’avez pas les paramètres, vous ne pouvez pas accéder à la page d’état. Par défaut : aucun. La surveillance de Munin sera utilisée
ping.path = /ping #FPM监控页面的ping网址. Si vous n’avez pas les paramètres, vous ne pouvez pas accéder à la page de ping. Cette page sert à détecter de l’extérieur si le FPM est actif et peut répondre aux requêtes. Notez qu’il doit commencer par une barre oblique (/).
ping.réponse = pong #用于定义ping请求的返回相应. Retourne du texte au format texte/clair pour HTTP 200. Par défaut : pong.
request_terminate_timeout = 0 #设置单个请求的超时中止时间. Cette option peut être utile pour les scripts qui ne sont pas abandonnés pour une raison particulière php.ini « max_execution_time » dans les paramètres. Régler sur « 0 » signifie « Désactivé ». Vous pouvez essayer de changer cette option lorsque des erreurs 502 sont fréquemment rencontrées.
request_slowlog_timeout = 10s #当一个请求该设置的超时时间后, les informations correspondantes de la pile d’appels PHP seront écrites dans le journal lent. Réglé à '0' signifie 'Off'
slowlog = log/$pool.log.slow #慢请求的记录日志, utilisez-les avec request_slowlog_timeout
rlimit_files = 1024 #设置文件打开描述符的rlimit限制. Valeur par défaut : L’handle ouvert par défaut est 1024, qui peut être consulté avec ulimit -n et modifié par ulimit -n 2048.
rlimit_core = 0 #设置核心rlimit最大限制值. Valeurs disponibles : « illimité », 0 ou entiers positifs. Valeur par défaut : valeur définie par le système.
chroot = #启动时的Chroot目录. Le répertoire défini doit être un chemin absolu. S’il n’y a pas de réglage, la chroot n’est pas utilisée.
chdir = #设置启动目录, Chdir est automatiquement envoyé à ce répertoire au démarrage. Le répertoire défini doit être un chemin absolu. Par défaut : répertoire actuel, ou/répertoire (lorsqu’il est chrooté)
catch_workers_output = oui #重定向运行过程中的stdout和stderr到主要的错误日志文件中. Si non défini, stdout et stderr seront redirigés vers /dev/null selon les règles de FastCGI. Par défaut : Null.
Réglage des paramètres PHP-FPM
PM = dynamique ; Indique quelle méthode de gestion des quantités de procédé est utilisée
dynamique signifie que le nombre de processus PHP-FPM est dynamique, le nombre est pm.start_servers spécifié au début, s’il y a plus de requêtes, il augmentera automatiquement pour garantir que le nombre de processus inactifs ne soit pas inférieur à pm.min_spare_servers, et si le nombre de processus est important, il sera également corrigé en conséquence pour garantir que le nombre de processus excédentaires ne dépasse pas pm.max_spare_servers
statique signifie que le nombre de processus dans php-fpm est statique, et que le nombre de processus est toujours celui spécifié par pm.max_children, et n’augmente ni ne diminue
pm.max_enfants = 300 ; Le nombre de processus php-fpm activés en mode statique pm.start_servers = 20 ; Le nombre de processus php-fpm au démarrage en mode dynamique pm.min_spare_servers = 5 ; Le nombre minimum de processus php-fpm en mode dynamique pm.max_serveurs_de réserve = 35 ; Le nombre maximal de processus php-fpm en mode dynamique
Si pm est statique, alors seul le paramètre pm.max_children est valide. Le système ouvrira un nombre défini de processus php-fpm
Si le PM est dynamique, alors le paramètre pm.max_children est invalide, et les trois derniers paramètres prennent effet. Le système démarre pm.start_servers processus php-fpm au début de la course php-pm, puis ajuste dynamiquement le nombre de processus php-fpm entre pm.min_spare_servers et pm.max_spare_servers selon les besoins du système
Alors, quelle méthode de gestion de projet est-elle la meilleure à choisir pour notre serveur ? En fait, comme Apache, exécuter des programmes PHP présente plus ou moins des problèmes de fuite mémoire après exécution. C’est pourquoi un processus php-fpm n’occupe qu’environ 3 M de mémoire au début, et après un certain temps d’exécution, il montera à 20-30 M.
Pour les serveurs à grande mémoire (comme la 8G 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 des processus et améliore l’efficacité. Comme les changements fréquents de processus php-fpm retardent aussi le temps, il sera préférable d’activer les effets statiques lorsque la mémoire est suffisamment grande. La quantité peut également être obtenue selon la mémoire/30M, par exemple, 8 Go de mémoire peut être réglée à 100, puis la mémoire consommée par php-fpm peut être contrôlée en 2G-3G. Si la mémoire est légèrement plus petite, comme 1G, alors spécifier le nombre de processus statiques est plus favorable à la stabilité du serveur. Cela garantit que php-fpm ne reçoit 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 mémoire réduite, comme un VPS avec 256 M de mémoire, même si elle est calculée selon une quantité de mémoire de 20 M, 10 processus php-CGI consommeront 200 M de mémoire, alors le plantage du système devrait être normal. Par conséquent, vous devriez essayer de contrôler le nombre de processus php-fpm, et après avoir clarifié à peu près la mémoire occupée par d’autres applications, spécifier un petit nombre statique pour celui-ci, ce qui rendra le système plus stable. Ou utilisez la méthode dynamique, car la méthode dynamique mettra fin au processus redondant et récupérera une partie de la mémoire, il est donc recommandé de l’utiliser sur des serveurs ou des VPS avec moins de mémoire. La quantité maximale spécifique est obtenue en fonction de la mémoire/20M. Par exemple, pour un VPS 512M, il est recommandé de définir pm.max_spare_servers à 20. Quant à la pm.min_spare_servers, il est recommandé de la définir selon la charge du serveur, et la valeur la plus appropriée est entre 5~10.
200 sur un serveur avec mémoire 4G est très bien (ma machine de test 1G, 64 est la meilleure, il est recommandé d’utiliser un test de résistance pour obtenir le meilleur rapport qualité-prix)
pm.max_requêtes = 10240 ;
Le plus gros problème dans le processus de configuration nginx php-fpm est le problème de fuite interne : la charge sur le serveur n’est pas importante, mais l’occupation de la mémoire augmente rapidement, consommant rapidement la mémoire puis commençant à consommer la partition de swap, et le système raccroche rapidement ! En fait, selon l’introduction officielle, php-CGI ne présente pas de fuite de mémoire, et php-cgi récupérera la mémoire après chaque requête, mais ne sera pas libéré sur le système d’exploitation, ce qui entraînera une grande quantité de mémoire occupée par php-cgi.
La solution officielle est de baisser la valeur du PHP_FCGI_MAX_REQUESTS ; si php-fpm est utilisé, le php-fpm.conf correspondant est le max_requests, ce qui signifie que combien de requêtes seront envoyées pour redémarrer le thread, il faut baisser cette valeur de manière appropriée, afin que php-fpm libère automatiquement de la mémoire, pas la plupart des 51200 sur Internet, etc., en fait, il y a une autre valeur liée à ce max_ Enfants, c’est le nombre de processus établis à chaque fois PHP-FPM, de sorte que la consommation réelle de mémoire soit max_children*max_requests* Chaque requête utilise de la mémoire, selon cela nous pouvons estimer l’utilisation de la mémoire, donc il n’est pas nécessaire d’écrire des scripts à tuer.
request_terminate_timeout = 30 ;
Temps d’exécution maximal, configurable en php.ini (max_execution_time)
request_slowlog_timeout = 2 ; Activez les bûches lentes slowlog = log/$pool.log.slow ; Chemin lent de logarithèmes
rlimit_files = 1024 ; Ajout d’une limite sur php-fpm aux descripteurs de fichiers ouverts
|