Maison >développement back-end >tutoriel php >Résolvez le problème de l'épuisement de la mémoire causé par un trop grand nombre de processus php-fpm sous l'exemple Linux_php
Cet article présente principalement comment résoudre le problème d'épuisement de la mémoire causé par un trop grand nombre de processus php-fpm sous Linux. Les amis qui ont besoin de comprendre php-fpm peuvent s'y référer. article pour apprendre. Parlons de la façon de résoudre le problème d'épuisement de la mémoire causé par trop de processus php-fpm.
Récemment, j'ai constaté que le serveur Linux et le service de base de données de mon blog raccrochaient souvent, nécessitant un redémarrage avant un accès normal. C'était extrêmement dégoûtant, j'ai donc décidé de commencer à résoudre le problème et de libérer mon temps et. problème d'énergie (je ne veux pas sortir fréquemment), puis redémarrer manuellement, ce qui est laborieux et prend du temps).
Analyser le problème
Après avoir découvert le problème, utilisez d'abord la commande free -m
pour afficher l'état d'exécution actuel du serveur :
Vous pouvez voir que la mémoire de mon serveur est de 2 Go, mais actuellement il ne reste que 70 Mo de mémoire disponible et l'utilisation de la mémoire atteint 92 %. le service de base de données se bloque en raison d'une utilisation élevée de la mémoire.
Continuez à regarder les détails, utilisez la commande top
:
Regardez ensuite les détails du processus répertoriés dans le résultat de la commande, en vous concentrant sur le point Taux d'utilisation de la mémoire à 10 colonnes :
Il s'avère que l'utilisation du processeur n'est pas élevée et que le problème du processeur est exclu. De plus, on peut voir que la base de données. le service occupe 15,2% de la mémoire, et l'utilisation de la mémoire lorsqu'elle est trop élevée, cela évince le processus de base de données (le processus qui occupe le plus de mémoire), provoquant le blocage du service. Nous devons donc vérifier les détails. utilisation de la mémoire. Quels processus consomment autant de mémoire ?
Utiliser la commande :
ps auxw|head -1;ps auxw|sort -rn -k4|head -40
Afficher les 40 principaux processus qui consomment le plus de mémoire :
En regardant le taux d'utilisation de la mémoire dans la quatrième colonne, nous avons constaté qu'en plus du service base de données mysql, le pool de services php-fpm en a ouvert trop processus enfants, occupant plus de la moitié de la mémoire , le problème est trouvé, nous commençons à résoudre le problème : définir le nombre de processus pour contrôler le pool de processus php-fpm.
Résoudre le problème
Grâce à divers moyens de recherche, il a été constaté que vous pouvez configurer le pm.max_children
attribut, contrôlez le nombre de sous-processus php-fpm. Tout d'abord, ouvrez le fichier de configuration php-fpm et exécutez la commande :
vi /etc/php-fpm.d/www.conf
Trouvez le champ pm.max_children
et constatez que sa valeur est trop grande :
Comme le montre la figure , la valeur pm.max_children
est de 50, et chaque processus occupe 1% à 2,5% de la mémoire, ce qui représente plus de la moitié de la mémoire, nous devons donc réduire sa valeur ici à 25. En même temps. temps, vérifiez les deux attributs suivants :
pm.max_spare_servers
: La valeur indique le nombre maximum garanti de processus inactifs. Si le processus inactif est supérieur à cette valeur, celui-ci sera nettoyé pm.min_spare_servers
: Le nombre minimum garanti de processus inactifs. Si le processus inactif est inférieur à cette valeur, un nouveau processus enfant sera créé
Aucune de ces deux valeurs ne peut être supérieure à la valeur pm.max_children
; la valeur pm.max_spare_servers
est définie sur 60 % à 80 % de la valeur pm.max_children
.
Enfin, redémarrez php-fpm
systemctl restart php-fpm
Vérifiez à nouveau l'utilisation de la mémoire, l'utilisation de la mémoire est réduite beaucoup :
Après avoir observé l'utilisation de la mémoire à plusieurs reprises, nous avons constaté qu'après cette amélioration, la consommation des ressources mémoire du serveur a été grandement réduite.
ps : Afficher le nombre de processus ouverts par php-fpm et la limite de mémoire de chaque processus
1. processus ouverts sur le serveur via la commande Combien y a-t-il de processus php-cgi
ps -fe |grep "php-fpm"|grep "pool"|wc -l
3. environnement linux+nginx+php, la limite mémoire de chaque processus php-fpm
netstat -anp|grep "php-fpm"|grep "tcp"|grep "pool"|wc -l
php_admin_value[memory_limit] = 128M (le fichier de configuration sur mon serveur se trouve dans /etc/php5/fpm/pool.d/www.conf. Ce fichier est inclus dans php-fpm.conf) Les nombres suivants peuvent être arbitraires Changement : 32M, 64M, 128M, 256M, 512M Ce paramètre peut être écrit en fonction de la taille de la mémoire de votre serveur et de vos besoins. Après modification, vous devez charger le service php-fpm.
Résumé
Ce qui précède est ce que l'éditeur vous présente pour résoudre le problème de l'épuisement de la mémoire causé par trop de processus php-fpm sous Linux. J'espère que cela aidera tout le monde.
Recommandations associées :
Comment activer les statistiques d'état avec php-fpm
Partage d'un exemple de code expliqué par php-fpm
Présentation de solutions pour réduire l'utilisation de la mémoire PHP-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!