Maison >développement back-end >tutoriel php >Comment résoudre le problème du manque de mémoire de php-fpm en raison d'un trop grand nombre de processus sous Linux
J'ai constaté que dans le service Linux de mon blog personnel, le service de base de données est souvent indisponible et doit être redémarré avant de pouvoir y accéder normalement, je vais donc vous apporter une solution à ce problème.
Analyser le problème
Après avoir découvert le problème, utilisez d'abord la commande free -m pour vérifier l'état d'exécution actuel du serveur :
Vous pouvez voir la mienne. La mémoire du serveur est de 2 Go, mais il ne reste actuellement que 70 Mo de mémoire disponible et l'utilisation de la mémoire atteint 92 %. Il est très probable que 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 supérieure :
Regardez ensuite les détails du processus répertoriés dans le résultat de la commande, en vous concentrant sur la 10ème colonne. de taux d'utilisation de la mémoire :
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 le service de base de données. occupe 15,2% de la mémoire et l'utilisation de la mémoire est trop élevée. 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 l'utilisation détaillée de la mémoire. les processus consomment tellement 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 ouvrait trop de processus enfants, occupant plus de la moitié de la mémoire. . Le problème a été trouvé et nous avons commencé à résoudre le problème : défini pour contrôler le nombre de processus du pool de processus php-fpm.
Résoudre le problème
Grâce à divers recherches, il a été constaté que le nombre de processus enfants php-fpm peut être contrôlé en configurant pm.max_children attribut. Tout d'abord, ouvrez le fichier de configuration php-fpm , 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 , le blogueur la définit ici à 25. En même temps, vérifiez les deux attributs suivants :
pm.max_spare_servers : Ceci La valeur indique le nombre maximum de processus inactifs garantis. Si le processus inactif est supérieur à cette valeur, le pm sera nettoyé : Garantit le nombre minimum de processus inactifs est inférieur à cette valeur, créez-en un nouveau. processus enfant ;
Aucune des deux valeurs ne peut être supérieure à la valeur pm.max_children, définissez généralement la valeur pm.max_spare_servers sur pm 60 % à 80 % de la valeur .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 beaucoup réduite :
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é considérablement réduite.
ps : Vérifiez le nombre de processus démarrés par php-fpm et la limite de mémoire de chaque processus
1 Utilisez la commande pour vérifier combien de processus php-cgi sont ouverts sur le serveur<.>
ps -fe |grep "php-fpm"|grep "pool"|wc -l
netstat -anp|grep "php-fpm"|grep "tcp"|grep "pool"|wc -l
Explication détaillée d'exemples de recherche binaire et de recherche binaire dans l'algorithme Java
Explication détaillée du binaire recherche en javascript _compétences javascript
javascript demi-recherche position du caractère dans le tableau (liste ordonnée)_compétences javascript
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!