WordPress · PHP-FPM

PHP-FPM et WordPress : dimensionner les workers sans épuiser la mémoire

Comprenez PHP-FPM pour WordPress : pm, max_children, mémoire par worker, file d’attente, slowlog et méthode de dimensionnement.

Lecture : environ 6 minGuide pratiquePar l’équipe technique Au P'tit Serveur
Illustration d’un diagnostic de performance WordPress entre navigateur et serveur
Illustration éditoriale dédiée aux performances et à l’hébergement WordPress.

Le problème à résoudre

PHP-FPM exécute les requêtes dynamiques de WordPress dans un ensemble de processus. Trop peu de workers crée une file d’attente ; trop de workers peut épuiser la mémoire et déclencher le swap ou l’arrêt du système.

Le dimensionnement part d’une mesure : mémoire réellement consommée par un worker sous une charge représentative, puis budget disponible après système, serveur web, base et cache.

Reconnaître les bons signaux

Signal observéInterprétation probablePremier contrôle
max_children reachedTous les workers occupésLire journal et file
Swap actifTrop de mémoire engagéeRéduire concurrence ou poids
Requêtes longuesPlugin, SQL ou API externeActiver slowlog

Les notions à maîtriser

  • pm=dynamic garde un nombre variable de workers prêts ; ondemand les crée à la demande.
  • pm.max_children fixe la concurrence maximale et doit respecter le budget mémoire.
  • request_terminate_timeout limite une requête bloquée mais peut interrompre une tâche légitime.
  • Le slowlog capture la pile des requêtes dépassant un seuil et aide au diagnostic.

Méthode de diagnostic

1. Mesurer la mémoire moyenne et haute d’un worker FPM.
2. Calculer le budget restant après MySQL, cache, OS et autres services.
3. Observer max active processes, listen queue et durée des requêtes.
4. Identifier les URL lentes avant d’ajouter des processus.

Plan d’action recommandé

  1. Fixer max_children à partir du budget mémoire, puis tester.
  2. Ajuster start_servers et spare_servers pour les pointes prévisibles.
  3. Activer status, ping et slowlog avec accès restreint.
  4. Configurer des timeouts cohérents entre proxy, serveur web et FPM.
  5. Revoir le réglage après ajout de plugins ou changement de trafic.

Commandes de contrôle

Adaptez 8.3 à la version installée. La première commande vérifie le service ; les suivantes affichent les événements récents et les processus classés par mémoire.

systemctl status php8.3-fpm --no-pager
journalctl -u php8.3-fpm --since '30 minutes ago' --no-pager
ps -ylC php-fpm8.3 --sort:rss

Ne calculez pas pm.max_children sur une seule mesure au repos : utilisez une charge représentative et gardez de la mémoire pour le système, la base et le cache.

Erreurs fréquentes à éviter

  • Multiplier max_children parce que le CPU semble disponible.
  • Utiliser un timeout court pour masquer une requête lente.
  • Exposer publiquement la page de statut PHP-FPM.

Indicateurs à suivre

IndicateurRepèrePourquoi le suivre
Listen queue0 hors pointes très brèvesDétecte l’attente
Max children reached0 en régime normalSignale la limite
RSS workerMesurée au p95Dimensionne la mémoire

Checklist avant validation

  • Une mesure de référence est conservée.
  • Le changement est testé hors production lorsque c’est possible.
  • Une sauvegarde ou un retour arrière est disponible.
  • Les dépendances web, e-mail et DNS ont été contrôlées.
  • Les journaux et alertes sont surveillés après intervention.
  • Le résultat est documenté avec date et responsable.

Questions fréquentes

Quel mode pour WordPress ?

dynamic convient souvent à une charge régulière ; ondemand peut aider les petits sites peu sollicités.

Comment calculer max_children ?

Budget mémoire FPM divisé par consommation prudente d’un worker, avec marge système.

Plus de workers accélère-t-il le site ?

Seulement si les requêtes attendent et que CPU, base et mémoire peuvent suivre.

Sources techniques

Pour vérifier les règles et approfondir le sujet :

Besoin de dimensionner PHP-FPM ?

L’analyse doit relier mémoire, file d’attente et requêtes lentes avant de modifier les workers.

Voir l’infogérance Linux