Récemment, j'ai découvert que la mémoire du blog était toujours « mangée » de temps en temps. Après m'être connecté au backend, il y avait parfois des décalages. Au début, j'ai soupçonné que cela était dû à un Swap insuffisant, j'ai donc ajouté un. quelques G de Swap à l'hôte VPS et j'ai observé qu'au bout d'un moment, j'ai découvert que quelle que soit la taille du Swap, il était lentement « mangé » !
Il est évident que certains services PHP occupent la mémoire du VPS et ne l'ont pas libérée, ce qui entraîne l'appel de Swap une fois la mémoire physique épuisée. Évidemment, Swap ne fonctionne pas aussi efficacement que la mémoire physique, donc le processus devient. bloqué. Considérant que le site WordPress utilise actuellement trop de thèmes et de plug-ins, il est normal que cette situation se produise.
Dans l'architecture LNMP, PHP fonctionne en mode FastCGI Selon le communiqué officiel, php-cgi recyclera toute la mémoire utilisée par le script à la fin de chaque requête, mais il ne la restituera pas au système d'exploitation, mais continuera. pour le conserver. Répondez à la prochaine requête PHP. Et php-fpm est le gestionnaire de processus FastCGI, utilisé pour contrôler la mémoire et les processus de PHP.
Par conséquent, la solution consiste à optimiser le nombre total de processus et la mémoire occupée par un seul processus via php-fpm, résolvant ainsi le problème du processus php-fpm occupant une grande mémoire et ne libérant pas de mémoire. Plus de méthodes d'optimisation de serveur Linux et d'expérience en matière de création de sites Web, ainsi que :
- Tutoriel sur la syntaxe de base et le fonctionnement de la tâche planifiée de la commande Linux Crontab-VPS/Server Automation
- Évaluation des performances de vitesse de l'hôte VPS Alibaba Cloud Japon-Japon SoftBank Hong Kong NTT Line
- La résolution du nom de domaine DNS permet à DNSSEC d'empêcher le piratage DNS - Paramètres DNS de Google Cloud DNSSEC
PS : mis à jour le 14 décembre 2018 Si la mémoire et les performances de votre hôte VPS ne sont pas très bonnes, il est préférable d'activer la mise en cache à ce moment-là pour économiser considérablement la consommation de ressources : WordPress active l'accélération du cache Nginx fastcgi_cache méthode -Exemple de configuration Nginx.
PS : mis à jour le 29 septembre 2019 En raison de l'artefact d'optimisation du serveur ngx_pagespeed développé par Google, il intègre un ensemble complet d'outils d'optimisation tels que le chargement différé des images, le Webp adaptatif, l'optimisation JS et CSS et l'optimisation des images. optimisation : artefact d'optimisation de PageSpeed Server-Nginx déploie le module ngx_pagespeed et subit des effets accélérés.
1. Analyser et déterminer l'utilisation de la mémoire de php-fpm
Si vous constatez que l'hôte VPS est bloqué, vérifiez d'abord l'utilisation de la mémoire. Les commandes couramment utilisées sont Top, Glances, Free, etc. Les amis qui ne connaissent pas ces commandes peuvent d'abord vérifier si la station minière le fait : Système Linux Résumé des commandes de surveillance - CPU maître, mémoire, E/S disque, etc. pour détecter les goulots d'étranglement des performances.
Utilisez la commande Glances et appuyez sur m pour afficher l'utilisation de la mémoire du processus hôte VPS actuel et triez-la de la mémoire la plus occupée à la mémoire la moins occupée (ou utilisez la commande Top et appuyez sur M, l'effet est le même). Comme indiqué ci-dessous (cliquez pour agrandir) :
3.2 Réduire le nombre de processus php-fpm
Si la mémoire de votre hôte VPS est occupée et épuisée, vous pouvez vérifier le nombre de vos processus php-fpm Calculez en fonction du nombre de processus php-fpm = mémoire/2/30. 1 Go de mémoire équivaut à 10 – Entre 20, cela dépend des modules complémentaires chargés par votre PHP.
3.3 exemple de configuration php-fpm
Ici, une configuration VPS de php-fpm avec 1 Go de mémoire est utilisée comme démonstration. En fonctionnement réel, la valeur du paramètre doit être prise en compte en fonction des performances du serveur lui-même, de PHP, etc.
pm = dynamic #dynamic和ondemand适合小内存。
pm.max_children = 15 #static模式下生效,dynamic不生效。
pm.start_servers = 8 #dynamic模式下开机的进程数量。
pm.min_spare_servers = 6 #dynamic模式下最小php-fpm进程数量。
pm.max_spare_servers = 15 #dynamic模式下最大php-fpm进程数量。
4. Résolvez le problème selon lequel le processus php-fpm ne libère pas de mémoire
Le problème ci-dessus de réduction de l'utilisation de la mémoire de php-fpm est obtenu en réduisant le nombre total de processus php-fpm. Lors de l'utilisation réelle, on constate que le processus php-fpm a toujours le problème d'occuper de la mémoire pendant une longue période. le libérer. La solution est de réduire le nombre de pm.max_requests.
Le nombre maximum de requêtes, max_requests, signifie que lorsque le nombre de requêtes traitées par un processus PHP-CGI s'accumule jusqu'à max_requests, le processus sera automatiquement redémarré, atteignant ainsi l'objectif de libérer de la mémoire. Prenons comme exemple les paramètres de l'hôte VPS avec 1 Go de mémoire (si la valeur que vous définissez n'atteint pas le niveau de libération de mémoire, vous pouvez continuer à la baisser) :
pm.max_requests = 500
Lorsque le processus php-fpm atteint la valeur définie par pm.max_requests, le processus sera redémarré pour libérer de la mémoire. L'image ci-dessous est le résultat de mon test. On peut voir que le processus php-fpm a été interrompu de force et que la mémoire a été libérée.
5. Résumé
Pour les besoins de mémoire importants, de concurrence et de disponibilité, il est recommandé d'utiliser le mode de gestion statique + le plus grand pm.max_children. S'il s'agit d'un serveur avec peu de mémoire, il est recommandé d'utiliser le mode dynamique ou à la demande et de réduire le nombre de processus pm.start_servers et pm.max_spare_servers.
Pourquoi n'ai-je pas ajusté les paramètres pour obtenir l'effet souhaité ? D'après l'expérience de wzfou.com, les paramètres du fichier de configuration php-fpm ne peuvent pas être généralisés. Ils doivent être ajustés en fonction des performances propres du serveur, du contenu dynamique WEB et des exigences de disponibilité. Si la mémoire est occupée pendant une longue période, c'est le cas. Il est préférable de vérifier s'il y a une fuite de mémoire.
Mise à jour le 9 octobre 2019 Si vos paramètres php-fpm sont trop petits, une erreur 502 peut se produire. Solution : résolvez l'erreur 502 dans le menu de sauvegarde des modifications en arrière-plan de WordPress.