Répertoire d'articles
Le nombre d'utilisateurs simultanés qu'un serveur peut gérer dépend non pas du nombre de cœurs qu'il possède, mais de la quantité de mémoire consommée par chaque processus.
Cette affirmation peut paraître provocatrice, mais elle reflète l'expérience la plus réelle et la plus douloureuse du secteur de l'exploitation et de la maintenance.
Pourquoi la mémoire est-elle le principal goulot d'étranglement ?
Beaucoup de gens voient un VPS avec un processeur à 8 cœurs et 24 Go de mémoire et pensent inconsciemment qu'ils peuvent facilement exécuter des centaines de processus PHP-FPM.
Cependant, en réalité, l'utilisation de la mémoire RSS d'un seul processus PHP atteint souvent 200 Mo.
Voici le résultat obtenu par des tests réels via la ligne de commande :
ps --no-headers -o rss -p $(pgrep php-fpm) | awk '{sum+=$1} END {print sum/NR/1024 " MB"}'
Dans le cadre complexe et l'environnement multi-plugins d' HestiaCP , en particulier sans optimisation OPcache, 200 Mo est la norme.
Cela signifie que c'est la mémoire, et non le processeur, qui constitue la limite absolue déterminant la concurrence maximale.

Fichier de configuration recommandé (php-fpm.conf)
pm = dynamic
pm.max_children = 80
pm.start_servers = 16
pm.min_spare_servers = 8
pm.max_spare_servers = 24
pm.max_requests = 500
pm.process_idle_timeout = 10s
request_terminate_timeout = 60s
Logique de calcul des paramètres et base de paramétrage
| Paramètres de configuration | 设定值 | Base de calcul et de configuration de base |
|---|---|---|
| pm | dynamic | Le mode dynamique permet l'ajout ou la suppression flexible de processus en fonction des besoins de concurrence, équilibrant ainsi la vitesse de réponse et l'utilisation de la mémoire. |
| pm.max_enfants | 80 | 24 Go de mémoire totale moins le noyau du système et MySQL/RedisAprès Nginx, il reste environ 16 Go pour PHP.16,384 MB / 200 MB ≈ 81.9Le paramétrer à 80 permet d'éliminer complètement les erreurs de mémoire insuffisante (OOM) en cas de forte concurrence. |
| pm.start_servers | 16 | Le préchauffage au démarrage est réglé sur deux fois le nombre de cœurs du processeur (8 cœurs × 2 = 16) afin de garantir que le service puisse gérer instantanément la concurrence de base après le redémarrage. |
| pm.min_serveurs_de_réserve | 8 | Configurez le nombre de cœurs du processeur à 8 pour garantir que les nouvelles requêtes puissent être traitées à tout moment pendant les périodes de faible trafic. |
| pm.max_serveurs_de_réserve | 24 | Réglez-le à 3 fois le nombre de cœurs du processeur (8 cœurs × 3 = 24) pour conserver un nombre modéré de processus après que le trafic diminue, afin de gérer les fluctuations légères. |
| pm.max_requests | 500 | Si un seul processus atteint une base importante de 200 Mo, réduire le nombre de requêtes à 500 avant de le détruire et de le reconstruire peut permettre de corriger plus rapidement les fuites de mémoire implicites. |
| pm.process_idle_timeout | 10s | Dépassement min_spare_servers Les processus inactifs sont automatiquement libérés et restitués à la mémoire système après 10 secondes sans requête. |
Paramètres de support essentiels et suggestions d'optimisation
1. Mécanisme anti-gueule de bois avec temporisation
request_terminate_timeout = 60s Voilà la clé.
Il peut interrompre de force les processus bloqués en raison d'un blocage de la base de données ou d'un blocage d'API tierce.
Pendant ce temps, Nginx fastcgi_read_timeout Il faut le conserver pendant au moins 60 secondes, sinon le client le recevra prématurément. 504 Gateway Timeout.
2. Stratégies pour surmonter les goulots d'étranglement de la mémoire
Un maximum de 80 processus simultanés signifie que, dans des conditions de concurrence extrême, le système peut traiter simultanément un maximum de 80 requêtes HTTP dynamiques.
Pour améliorer encore la capacité, il convient de se concentrer sur la réduction de la consommation de mémoire par processus.
- Activer OPcache: 在
php.iniConfiguration moyenneopcache.enable=1及opcache.memory_consumption=256La mise en cache du bytecode peut réduire l'utilisation de la mémoire d'un processus unique de 200 Mo à 60-100 Mo. - Contrôle raisonnable de la limite de mémoire:将
php.inimilieumemory_limitLimité à128M或256MPour prévenir les scripts individuels anormaux无限Cela consomme beaucoup de mémoire.
Une fois que l'utilisation de la mémoire d'un seul processus descend à 100 Mo...pm.max_children Il peut être mis à niveau en toute sécurité vers 150 De plus, la capacité de traitement simultané a presque doublé.
Points de vue faisant autorité cités
Conformément aux recommandations de la documentation officielle de Nginx :
« Les applications FastCGI doivent toujours être surveillées à l'aide de directives de délai d'expiration afin d'éviter l'épuisement des ressources. »
(Source : Documentation Nginx)
Le manuel officiel de PHP indique clairement :
« pm.max_children définit le nombre maximal de processus enfants à créer. C'est la directive la plus importante. »
(Source : Documentation PHP-FPM)
Ces points de vue faisant autorité correspondent parfaitement à nos pratiques, prouvant que la logique d'optimisation ne repose pas uniquement sur l'expérience, mais aussi sur des pratiques exemplaires normalisées.
Conclusion : Mes points de vue et citations clés
Dans les scénarios de forte concurrence, le processeur est le moteur, la mémoire est le réservoir de carburant et PHP-FPM est le répartiteur de flotte.
Quelle que soit la puissance du moteur, si le réservoir de carburant n'est pas assez grand, le convoi n'ira pas bien loin.
Les véritables experts ne poussent pas aveuglément les paramètres au maximum, mais calculent précisément l'utilisation de la mémoire de chaque processus afin d'éviter à la fois le gaspillage et la surcharge.
L'essence de l'optimisation consiste à trouver l'équilibre optimal avec des ressources limitées.
Il ne s'agit pas seulement d'une technologie, mais aussi d'une philosophie.
Par conséquent, cessez de croire que « le nombre de cœurs détermine tout ». Ce qui détermine réellement la limite de concurrence, c'est votre contrôle sur la mémoire.
Passez à l'action et optimisez votre VPS à son plein potentiel, en tirant le meilleur parti de chaque goutte de mémoire.
J'espère que l'article « VPS 8 cœurs 24 Go à court de mémoire ? Optimisation extrême du pool de processus PHP-FPM sous HestiaCP » publié sur le blog de Chen Weiliang ( https://www.chenweiliang.com/ ) vous sera utile.
N'hésitez pas à partager le lien de cet article : https://www.chenweiliang.com/cwl-34509.html
