Maison > développement back-end > tutoriel php > Explication détaillée de la résolution du problème d'épuisement de la mémoire causé par un trop grand nombre de processus php-fpm sous Linux

Explication détaillée de la résolution du problème d'épuisement de la mémoire causé par un trop grand nombre de processus php-fpm sous Linux

jacklove
Libérer: 2023-04-02 21:14:01
original
2999 Les gens l'ont consulté

Cet article présente principalement comment résoudre le problème d'épuisement de la mémoire causé par trop de processus php-fpm sous Linux. Les amis dans le besoin peuvent s'y référer

Récemment, j'ai découvert que le serveur et le service de base de données Linux. de mon blog personnel pendait souvent, ce qui m'obligeait à redémarrer avant de pouvoir y accéder normalement, ce qui é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 mon énergie (je ne voulais pas le faire). avoir des problèmes fréquents puis redémarrer manuellement, ce qui était laborieux et prenait beaucoup de 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 évincera 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
Copier après la connexion

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 de 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. a été trouvé et nous avons commencé à résoudre le problème : définir le contrôle du nombre de processus du pool de processus php-fpm.

Résoudre le problème

Grâce à diverses méthodes de recherche, il a été constaté que le nombre de sous-processus php-fpm peut être contrôlé en configurant l'attribut pm.max_children. Tout d'abord, ouvrez le fichier de configuration php-fpm, exécutez la commande :

vi /etc/php-fpm.d/www.conf
Copier après la connexion

Recherchez le champ pm.max_children et trouvez que sa valeur est trop grande :

Comme le montre la figure, la valeur pm.max_children est de 50. 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, blogger Ici, elle est fixée à 25. En même temps, les deux propriétés suivantes sont vérifiées :

pm.max_spare_servers : Cette valeur indique le nombre maximum garanti de processus inactifs. Si les processus inactifs sont supérieurs à cette valeur, cela sera nettoyé pm.min_spare_servers : Garanti Le nombre minimum de processus inactifs est inférieur à cette valeur, un nouvel enfant. le processus sera créé ;

Les deux valeurs ne peuvent pas être supérieures à la valeur pm.max_children. Habituellement, la valeur pm.max_spare_servers est définie sur la valeur pm.max_children.

Enfin, redémarrez php-fpm

systemctl restart php-fpm
Copier après la connexion

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 : 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
Copier après la connexion

Dans l'environnement linux+nginx+php, la limite de mémoire de chacun. Processus php-fpm


Paramètres Méthode :

 netstat -anp|grep "php-fpm"|grep "tcp"|grep "pool"|wc -l
Copier après la connexion

Modifier le fichier de configuration php-fpm.conf

php_admin_value[memory_limit] = 128M (le fichier de configuration sur mon serveur est 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 basé sur la taille de la mémoire de votre serveur et de vos besoins. Après modification, nous devons 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 vous sera utile. Si vous avez des questions, laissez-moi un message et je vous répondrai à temps. Je voudrais également vous remercier tous pour votre soutien au site Web php chinois !

Articles qui pourraient vous intéresser :

Analyse détaillée d'exemples de la façon dont php implémente la fonction d'enregistrement

php-fpm paramètres sous Linux Explication détaillée de l'introduction de la configuration et des instructions d'optimisation des paramètres

Explication détaillée de la migration des données et du remplissage des données dans Laravel

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal