Optimiser PHP-FPM Réglez les pools PHP-FPM sur VPS HolyCloud : pm dynamic, mémoire, slowlog, OPcache et intégration Nginx ou Apache. ~12 min de lecture Intermédiaire #php-fpm #php #performance #opcache Optimiser PHP-FPM PHP-FPM (FastCGI Process Manager) exécute PHP en processus séparés du serveur web, ce qui améliore stabilité et performances sur un VPS Linux HolyCloud. Ce guide ajuste le pool www, la gestion dynamique des workers, OPcache, les slow logs et l'intégration avec Nginx ou Apache. Prérequis VPS HolyCloud avec PHP-FPM installé (php8.2-fpm ou php8.3-fpm) Serveur web Nginx ou Apache déjà configuré pour passer les .php au socket FPM Connaissance approximative de la RAM disponible (free -h) Accès sudo Site de test ou trafic réel pour valider les réglages Conseil : estimez ~30–80 Mo RAM par worker PHP selon votre application ; ne dépassez pas la RAM physique. Étape 1 : identifier la version et le pool php -v systemctl status php8.2-fpm 2>/dev/null || systemctl status php8.3-fpm ls /etc/php/ ls /run/php/ Fichier pool par défaut (adaptez la version) : sudo nano /etc/php/8.2/fpm/pool.d/www.conf Sauvegarde : sudo cp /etc/php/8.2/fpm/pool.d/www.conf /etc/php/8.2/fpm/pool.d/www.conf.bak.$(date +%F) Étape 2 : mode pm et nombre de workers Dans [www] : pm = dynamic pm.max_children = 20 pm.start_servers = 4 pm.min_spare_servers = 2 pm.max_spare_servers = 6 pm.max_requests = 500 Formule indicative pour pm.max_children : max_children ≈ (RAM disponible pour PHP) / mémoire moyenne par requête Mesurer la mémoire d'un script : ps -o rss,cmd -C php-fpm8.2 | head -10 Petit VPS 2 Go (site WordPress léger) : pm.max_children = 10 pm.start_servers = 2 pm.min_spare_servers = 1 pm.max_spare_servers = 4 Étape 3 : slowlog et timeouts sudo nano /etc/php/8.2/fpm/pool.d/www.conf request_slowlog_timeout = 5s slowlog = /var/log/php8.2-fpm-slow.log request_terminate_timeout = 120s sudo touch /var/log/php8.2-fpm-slow.log sudo chown www-data:www-data /var/log/php8.2-fpm-slow.log Étape 4 : OPcache (production) sudo nano /etc/php/8.2/mods-available/opcache.ini opcache.enable=1 opcache.memory_consumption=128 opcache.interned_strings_buffer=16 opcache.max_accelerated_files=10000 opcache.validate_timestamps=0 validate_timestamps=0 maximise les perfs mais exige un reload FPM après déploiement de code : sudo systemctl reload php8.2-fpm En développement, gardez validate_timestamps=1. Étape 5 : php.ini — limites raisonnables sudo nano /etc/php/8.2/fpm/php.ini memory_limit = 256M upload_max_filesize = 64M post_max_size = 64M max_execution_time = 120 realpath_cache_size = 4096k Étape 6 : intégration Nginx (extrait) sudo nano /etc/nginx/sites-available/exemple.fr location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php8.2-fpm.sock; fastcgi_read_timeout 120; } sudo nginx -t && sudo systemctl reload nginx Étape 7 : status et ping (monitoring local) Dans www.conf (restreindre à localhost) : pm.status_path = /fpm-status ping.path = /fpm-ping Nginx : location ~ ^/(fpm-status|fpm-ping)$ { access_log off; allow 127.0.0.1; deny all; include fastcgi_params; fastcgi_pass unix:/run/php/php8.2-fpm.sock; } curl http://127.0.0.1/fpm-ping curl http://127.0.0.1/fpm-status?full sudo systemctl restart php8.2-fpm Vérification php -i | grep -E 'opcache.enable|memory_limit' ps aux | grep php-fpm | wc -l free -h ab -n 100 -c 10 http://127.0.0.1/ 2>/dev/null | tail -5 Sous charge, la RAM ne doit pas saturer (dmesg | grep -i oom) et les temps de réponse restent stables. Besoin d'aide HolyCloud 502 Bad Gateway : socket FPM incorrect (ls /run/php/), service FPM arrêté Workers saturés : augmentez pm.max_children ou optimisez le code ; vérifiez slowlog OPcache ne se met pas à jour : reload FPM ou validate_timestamps=1 Support HolyCloud : free -h, extrait www.conf, tail slowlog, version PHP Suite de la lecture Article précédent Nginx et Certbot (Let's Encrypt) Lire Article suivant Première connexion SSH au VPS Lire