Maison  >  Article  >  développement back-end  >  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

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

php中世界最好的语言
php中世界最好的语言original
2017-12-20 14:11:521649parcourir

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


2. Vérifiez combien de processus php-cgi ont été utilisés pour gérer les requêtes TCP

netstat -anp|grep "php-fpm"|grep "tcp"|grep "pool"|wc -l


3.linux Dans l'environnement +nginx+php, la limite mémoire de chaque processus php-fpm

Méthode de paramétrage :

Modifier le fichier de configuration php-fpm.conf

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 modifiés à volonté). : 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.


Je pense que vous maîtrisez les méthodes après avoir lu ces cas. Pour des informations plus intéressantes, veuillez prêter attention aux autres articles connexes sur le site Web chinois de php !

Lecture connexe :

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn