Le WordPress d'aujourd'hui, décodé pour les développeurs

Hébergement & serveurs

Réservations touristiques : un mutualisé qui plante à chaque pic

Le site d'un office de tourisme tombe en erreur 502 à chaque week-end de forte affluence, toujours au même moment, jamais en semaine.

Par WordPress Développement • 28 novembre 2020 • 5 min de lecture • Aucun commentaire
Réservations touristiques : un mutualisé qui plante à chaque pic

Quatre week-ends d’affilée, la même erreur : une page blanche suivie d’un 502 Bad Gateway, systématiquement entre 10 heures et midi, jamais en semaine. Le site d’un office de tourisme de moyenne montagne présente ce schéma de panne récurrent depuis le début de la saison, à chaque pic de fréquentation touristique du week-end.

Une panne qui se répète selon un motif aussi net n’est pas un hasard : c’est un signal de dimensionnement. Contrairement à un incident isolé, ce type de récurrence permet d’observer le comportement du serveur au moment précis où il commence à faiblir, ce qui change complètement l’angle du diagnostic.

Ce que montrent les journaux au moment de la panne

Les journaux Nginx pour la période concernée affichent des erreurs de type upstream timed out et connect() to unix:/run/php/php7.4-fpm.sock failed (11: Resource temporarily unavailable). Cette dernière erreur, en particulier, pointe directement vers un épuisement du pool PHP-FPM : le serveur PHP n’accepte plus de nouvelles connexions parce que tous ses processus enfants sont déjà occupés.

  • Erreur 502 Bad Gateway côté Nginx, jamais côté PHP directement
  • Message Resource temporarily unavailable dans le journal PHP-FPM
  • Corrélation exacte avec les créneaux de forte fréquentation touristique

Vérifier le dimensionnement réel du pool PHP-FPM

La configuration du pool, sur ce mutualisé, limitait le nombre maximal de processus enfants à une valeur bien inférieure à ce que le trafic de pointe exigeait. Le fichier de configuration du pool concerné révélait le problème dès la première lecture :

pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
L'essentiel à retenir : Une panne récurrente et prévisible se diagnostique différemment d'un incident isolé ; Le nombre de processus PHP-FPM disponibles est souvent la vraie limite ; Un mutualisé peut suffire si son dimensionnement est vérifié, pas supposé

Cinq processus enfants au maximum, pour un site qui reçoit, aux heures de pointe du week-end, plusieurs dizaines de requêtes simultanées liées à la consultation du calendrier des hébergements et des activités. Dès que la sixième requête arrive alors que les cinq processus sont occupés, elle se met en attente, puis finit par expirer côté Nginx, qui renvoie un 502 au visiteur.

Un mutualisé n’est pas automatiquement en cause

Un point mérite d’être souligné : le problème ne venait pas du fait que l’hébergement soit mutualisé, mais du fait que le pool PHP-FPM alloué n’avait jamais été ajusté au trafic réel du site. Beaucoup d’offres mutualisées modernes permettent d’ajuster ces paramètres, ou proposent des paliers de ressources supérieurs sans nécessiter de migration vers un VPS.

Avant de conclure qu’un hébergement mutualisé « ne suffit plus », il vaut mieux vérifier ce qui a réellement été configuré. Un pool PHP-FPM sous-dimensionné produit exactement les mêmes symptômes qu’un hébergement trop faible, pour un coût de correction sans commune mesure.

Les ajustements appliqués

L’hébergeur a accepté de relever les limites du pool sur ce compte, sans changement d’offre :

  • pm.max_children porté à 15, en cohérence avec la mémoire disponible sur l’offre souscrite
  • Activation d’un cache de pages complet côté WordPress, pour réduire le nombre de requêtes PHP réellement exécutées
  • Mise en place d’une surveillance simple du taux d’utilisation du pool, consultable dans les journaux

Avec un cache de pages actif, la majorité des visiteurs consultant le calendrier ne déclenchent plus d’exécution PHP à chaque requête, ce qui réduit mécaniquement la pression sur le pool, même sans toucher à sa taille.

Distinguer une panne de dimensionnement d’une vraie surcharge

Un point mérite d’être précisé avant de conclure trop vite qu’un serveur est sous-dimensionné : le trafic mesuré lors des pics, une fois consolidé, restait très modeste au regard de ce qu’un serveur mutualisé récent peut absorber. Quelques dizaines de visiteurs simultanés ne devraient jamais suffire à saturer un hébergement correctement réglé. C’est bien la configuration par défaut du pool, héritée d’une offre pensée pour des sites à trafic constant et faible, qui expliquait l’essentiel du problème.

  • Trafic de pointe mesuré autour de quarante visiteurs simultanés, un volume modeste en absolu
  • Pool limité à cinq processus, calibré pour un site sans pic particulier
  • Absence totale de cache de pages avant l’intervention, chaque requête déclenchant une exécution PHP complète

Ce que ce dossier change pour les prochains projets similaires

Un site à trafic saisonnier et concentré sur des créneaux précis mérite un dimensionnement pensé pour le pic, pas pour la moyenne. Vérifier la configuration du pool PHP-FPM en amont, activer un cache de pages adapté au contenu, et surveiller les journaux pendant les premières semaines de forte affluence permettent d’éviter une panne qui, sur ce dossier, s’est répétée quatre semaines avant d’être enfin corrigée.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Partager :

À propos de l'auteur

WordPress Développement

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi