Chargement de Smiley Hoster
Aller au contenu

Régler pm.max_children selon la RAM du VPS pour stabiliser WordPress

Équipe Smiley Hoster · · 2 min de lecture
Un budget de 4 Gio est réparti entre services, dix processus PHP et une marge de mémoire.

Le retour d'expérience de Cloudflare sur son cache DNS rappelle l'intérêt de mesurer la mémoire réellement occupée. Pour WordPress, une décision concrète consiste à limiter le nombre de processus PHP-FPM : trop de concurrence peut épuiser le VPS.

1. Mesurer les travailleurs du bon pool

Ce guide utilise Ubuntu 24.04, PHP 8.3 et le pool www. Adaptez chemins et service si votre version diffère. Dans PHP-FPM, pm.max_children limite les requêtes simultanément traitées par le pool ; ce n'est pas le nombre de visiteurs autorisés.

Avant toute modification, sauvegardez le fichier :

Exemple
sudo cp /etc/php/8.3/fpm/pool.d/www.conf \ /root/www.conf.before-sizingfree -mps -eo rss=,args= | \ awk '/php-fpm: pool www/ && !/awk/ {print $1}' \ | sort -n

Les nombres issus de ps sont des Kio de RSS. Divisez-les par 1024 pour obtenir des Mio. Faites plusieurs relevés pendant des parcours représentatifs : pages non cachées, administration, panier si votre site en possède un.

Ne dimensionnez pas avec les seuls processus au repos. Le RSS compte aussi de la mémoire partagée : sa somme peut surestimer le total, mais donne une première estimation prudente. Une mesure PSS peut affiner le calcul. N'utilisez pas memory_limit comme si c'était la consommation complète d'un travailleur.

2. Construire un budget avec une marge

Réservez d'abord de la RAM pour le système, MariaDB, Nginx, les caches partagés, les autres services et leurs pointes. S'il existe plusieurs pools, ils doivent se partager le même budget, pas chacun toute la mémoire du VPS.

Exemple illustratif, à remplacer par vos mesures :

PosteBudget
RAM totale4096 Mio
Réserve hors travailleurs PHP2048 Mio
Budget restant pour les travailleurs2048 Mio
RSS de dimensionnement par travailleur160 Mio

Le plafond arithmétique est floor(2048 / 160) = 12. Commencer à 10 laisse 448 Mio de marge dans ce budget. Ce résultat n'est ni une mesure de votre site ni une garantie contre les pointes.

Ouvrez le pool et remplacez les directives correspondantes, sans les dupliquer :

Exemple
sudoedit /etc/php/8.3/fpm/pool.d/www.conf
Exemple
pm = dynamicpm.max_children = 10pm.start_servers = 2pm.min_spare_servers = 2pm.max_spare_servers = 4

Ces valeurs forment un exemple cohérent avec le calcul. Si vos mesures imposent un autre plafond, adaptez aussi les valeurs de démarrage et de réserve.

3. Valider sous charge puis ajuster

Exemple
sudo php-fpm8.3 -tsudo systemctl reload php8.3-fpmsudo journalctl -u php8.3-fpm \ --since "15 minutes ago" --no-pagersudo tail -n 50 /var/log/php8.3-fpm.logfree -mvmstat 1 10

Rechargez seulement si le test réussit. Rejouez les parcours mesurés et comparez temps de réponse, erreurs, mémoire disponible et activité swap. Consultez les deux destinations de journaux : leur usage dépend de la configuration.

Erreurs courantes : augmenter le plafond dès qu'un message max_children apparaît, oublier MariaDB ou mesurer uniquement des pages servies par le cache. Une saturation du pool peut traduire des requêtes lentes : cherchez leur cause avant d'ajouter des processus. La RAM n'est pas le seul plafond ; CPU et base peuvent saturer avant elle.

Validez après plusieurs pointes représentatives, avec des opérations WordPress réussies et une marge mémoire conservée. En cas de régression, restaurez le fichier sauvegardé, testez sa syntaxe et rechargez le service.

Sources : Cloudflare, PHP, configuration FPM.

Cet article a-t-il répondu à votre question ?
Vos retours orientent ce qu'on écrit ensuite.

Votre site en ligne aujourd'hui

Migration gratuite* · remboursé 30 jours

Commencer* Un site de moins de 30 Go, offres cPanel, WordPress et VPS.