
La version non éditée de cet article a été initialement publiée sur et est publiée ici avec la permission de son .
Je vais briÚvement expliquer comment configurer PHP-FPM pour augmenter le débit, réduire la latence et utiliser plus efficacement les ressources processeur et mémoire. Par défaut, la ligne PM (process manager, gestionnaire de processus) dans PHP-FPM est définie sur dynamic, et si vous manquez de mémoire, il vaut mieux définir ondemand. Comparons les deux options de gestion basées sur la documentation de php.net et voyons en quoi mon préféré diffÚre : static pm pour un fort volume de trafic :
pm = dynamic â le nombre de processus enfants est configurĂ© dynamiquement en fonction des directives suivantes : pm.max_children, pm.start_servers, pm.min_spare_servers, pm.max_spare_servers.
pm = ondemand â les processus sont créés Ă la demande (contrairement Ă la crĂ©ation dynamique, oĂč pm.start_servers est lancĂ© au dĂ©marrage du service).
pm = static â le nombre de processus enfants est fixe et spĂ©cifiĂ© par le paramĂštre pm.max_children.
Pour plus de détails, voir le .
Similarités entre le gestionnaire de processus PHP-FPM et le régulateur de fréquence du processeur
Cela peut sembler hors sujet, mais je vais le relier au thĂšme de la configuration de PHP-FPM. Qui n'a jamais rencontrĂ© de ralentissement du processeur â sur un ordinateur portable, une machine virtuelle ou un serveur dĂ©diĂ© ? Vous vous souvenez de l'optimisation de la frĂ©quence du processeur ? Ces paramĂštres, disponibles pour nix et Windows, peuvent amĂ©liorer les performances et la rĂ©activitĂ© systĂšme si vous modifiez le paramĂštre du rĂ©gulateur de processeur de ondemand sur performance*. Cette fois, comparons les descriptions et examinons les similaritĂ©s :
Governor = ondemand â mise Ă l'Ă©chelle dynamique de la frĂ©quence processeur en fonction de la charge actuelle. Passe rapidement Ă la frĂ©quence maximale, puis la rĂ©duit lors de pĂ©riodes d'inactivitĂ©.
Governor = conservative = mise à l'échelle dynamique de la fréquence en fonction de la charge actuelle. Augmente et diminue la fréquence plus doucement que ondemand.
Governor = performance â la frĂ©quence est toujours maximale.
Pour plus de détails, voir le .
Vous voyez la similarité ? Je voulais montrer cette comparaison pour vous convaincre que le mieux est d'utiliser pm static pour PHP-FPM.
Pour le rĂ©gulateur de processeur, le paramĂštre performance aide Ă augmenter en toute sĂ©curitĂ© les performances, car elle dĂ©pend presque entiĂšrement de la limite du processeur du serveur. En plus de cela, il y a bien sĂ»r d'autres facteurs, comme la tempĂ©rature, la charge de la batterie (dans un ordinateur portable) et d'autres effets secondaires liĂ©s au fonctionnement constant du processeur Ă 100 %. La configuration de performance garantit le fonctionnement le plus rapide du processeur. Par exemple, lisez sur , avec lequel le panneau RPi utilisera le rĂ©gulateur performance, oĂč l'amĂ©lioration des performances sera plus perceptible en raison de la faible frĂ©quence d'horloge du CPU.
L'utilisation de pm static pour atteindre des performances maximales du serveur
Le paramĂštre PHP-FPM pm static dĂ©pend en grande partie de la mĂ©moire libre sur le serveur. S'il y a peu de mĂ©moire, il vaut mieux choisir ondemand ou dynamic. D'un autre cĂŽtĂ©, si vous avez de la mĂ©moire, vous pouvez Ă©viter des coĂ»ts supplĂ©mentaires du gestionnaire de processus PHP, en configurant pm static Ă la capacitĂ© maximale du serveur. Autrement dit, si tout est bien calculĂ©, il faut dĂ©finir pm.static au maximum du nombre de processus PHP-FPM pouvant ĂȘtre exĂ©cutĂ©s, sans causer de problĂšmes de manque de mĂ©moire ou de cache. Mais pas si haut que cela surcharge les processeurs et accumule une multitude d'opĂ©rations PHP-FPM en attente d'exĂ©cution.
Sur la capture d'Ă©cran ci-dessus, le serveur est configurĂ© avec pm = static et pm.max_children = 100, et cela occupe environ 10 Go des 32 disponibles. Notez les colonnes surlignĂ©es, ici tout est clair. Sur cette capture d'Ă©cran, il y avait environ 200 utilisateurs actifs (plus de 60 secondes) dans Google Analytics. Ă ce niveau, environ 70 % des processus enfants PHP-FPM sont encore inactifs. Cela signifie que PHP-FPM est toujours configurĂ© Ă la capacitĂ© maximale des ressources du serveur, indĂ©pendamment du trafic actuel. Le processus inactif attend les pics de trafic et rĂ©agit immĂ©diatement. Vous n'avez pas Ă attendre que pm gĂ©nĂšre des processus enfants, puis les termine lorsque le dĂ©lai pm.process_idle_timeoutexpire. J'ai dĂ©fini une valeur trĂšs Ă©levĂ©e pour pm.max_requests, car c'est un serveur de production sans fuites de mĂ©moire en PHP. Vous pouvez dĂ©finir pm.max_requests = 0 avec static, si vous ĂȘtes totalement convaincu des scripts PHP existants et futurs. Mais il est prĂ©fĂ©rable de redĂ©marrer les scripts de temps en temps. DĂ©finissez un nombre Ă©levĂ© de requĂȘtes, car nous voulons Ă©viter des coĂ»ts supplĂ©mentaires en pm. Par exemple, au moins pm.max_requests = 1000 â en fonction du nombre pm.max_children et du nombre de requĂȘtes par seconde.
La capture d'Ă©cran montre la commande , filtrĂ© par u (utilisateur) et le nom d'utilisateur PHP-FPM. Seuls les 50 premiers processus (ou Ă peu prĂšs) sont affichĂ©s (je n'ai pas comptĂ© exactement), mais en gros, top montre les statistiques principales qui s'affichent dans la fenĂȘtre du terminal. Dans ce cas, triĂ© par % CPU (%CPU). Pour voir tous les 100 processus PHP-FPM, utilisez la commande :
top -bn1 | grep php-fpmQuand utiliser pm ondemand et dynamic
Si vous utilisez pm dynamic, des erreurs similaires surviennent :
WARNING: [pool xxxx] semble occupĂ© (vous devrez peut-ĂȘtre augmenter pm.start_servers, ou pm.min/max_spare_servers), gĂ©nĂ©rant 32 enfants, il y en a 4 inactifs, et 59 enfants au totalEssayez de modifier le paramĂštre, l'erreur ne disparaĂźtra pas, comme . Dans ce cas, la valeur de pm.min Ă©tait trop basse, et comme le trafic web varie considĂ©rablement avec des pics Ă©levĂ©s et des baisses importantes, il est difficile de rĂ©gler correctement pm dynamic. En gĂ©nĂ©ral, on utilise pm ondemand, . Mais c'est encore pire, car ondemand il termine les processus inactifs Ă zĂ©ro lorsque le trafic est faible ou inexistant, et au final vous aurez toujours des problĂšmes avec les variations de trafic. Ă moins, bien sĂ»r, que vous n'ayez mis en place un temps d'attente Ă©levĂ©. Dans ce cas, il vaut mieux utiliser pm.static + un nombre Ă©levĂ© pm.max_requests.
PM dynamic et surtout ondemand peuvent ĂȘtre utiles si vous avez plusieurs pools PHP-FPM. Par exemple, vous hĂ©bergez plusieurs comptes cPanel ou plusieurs sites web dans diffĂ©rents pools. J'ai un serveur oĂč, disons, il y a plus de 100 comptes cPanel et environ 200 domaines, et pm.static ou mĂȘme dynamic ne m'aiderait pas. Ici, seul ondemand, car plus de deux tiers des sites web reçoivent peu ou pas de trafic, et avec ondemand tous les processus enfants tomberont, ce qui nous fera Ă©conomiser beaucoup de mĂ©moire ! Heureusement, les dĂ©veloppeurs de cPanel l'ont remarquĂ© et ont Ă©tabli la valeur par dĂ©faut ondemand. Avant cela, lorsque la valeur par dĂ©faut Ă©tait dynamic, PHP-FPM n'Ă©tait pas du tout adaptĂ© pour les serveurs partagĂ©s fortement chargĂ©s. Beaucoup utilisaient suPHP, car pm dynamic consommait de la mĂ©moire mĂȘme avec des pools inactifs et des comptes cPanel PHP-FPM. TrĂšs probablement, en cas de bon trafic, vous ne serez pas hĂ©bergĂ© sur un serveur avec un grand nombre de pools PHP-FPM (hĂ©bergement partagĂ©).
Conclusion
Si vous utilisez PHP-FPM et que vous avez un trafic sĂ©rieux, les gestionnaires de processus ondemand et dynamic pour PHP-FPM limiteront la bande passante Ă cause des coĂ»ts qui leur sont inhĂ©rents. Analysez votre systĂšme et configurez les processus PHP-FPM selon la capacitĂ© maximale du serveur. D'abord, dĂ©finissez pm.max_children en fonction de l'utilisation maximale du pm dynamic ou ondemand, puis augmentez cette valeur Ă un niveau oĂč la mĂ©moire et le processeur fonctionneront sans surcharge excessive. Vous remarquerez qu'avec pm static, Ă©tant donnĂ© que tout est stockĂ© en mĂ©moire, les pics de trafic au fil du temps provoqueront moins de pics pour le processeur, et les moyennes de charge du serveur et du processeur s'aligneront. La taille moyenne du processus PHP-FPM dĂ©pend du serveur web et nĂ©cessite un rĂ©glage manuel, c'est pourquoi des gestionnaires de processus plus automatisĂ©s sont dynamic et ondemand â plus populaires. J'espĂšre que cet article a Ă©tĂ© utile.
MAJ Un diagramme de benchmark a Ă©tĂ© ajoutĂ© . Si les processus PHP-FPM sont en mĂ©moire, la performance augmente grĂące Ă la consommation de mĂ©moire, oĂč ils se trouvent et attendent. Trouvez l'option optimale pour vous.
Source : habr.com
