FPM

FPM (FastCGI Process Manager) est un gestionnaire de processus PHP qui permet de gérer plusieurs requêtes en simultané, particulièrement utile pour les sites devant gérer une forte charge. Pour l’installer :

Une fois installé il faut créer un groupe de processus et le lier à nos sites :

  1. S’assurer que /etc/php/<version>/fpm/pool.d/www.conf contient bien ces lignes ;
    listen = /run/php/php<version>-fpm.sock
    listen.owner = www-data
    listen.group = www-data
    listen.mode = 0660
    
  2. Ajouter ce bloc à chaque VirtualHost Apache ;
    <FilesMatch "\.php$">
        SetHandler "proxy:unix:/run/php/php<version>-fpm.sock|fcgi://localhost/"
    </FilesMatch>
    
  3. Redémarrer Apache et PHP FPM avec sudo systemctl restart php-fpm apache2.

Les paramètres suivants peuvent être modifiés pour gagner en performances, ils se placent dans /etc/php/<version>/fpm/php-fpm.conf :

Nom du paramètreDescription
pmLa stratégie de gestion des processus (static, dynamic ou ondemand)
pm.max_requestsLe nombre de requêtes à traiter avant de redémarrer le processus, permet d’éviter les fuites de mémoire trop grosses.

S’il y a des problèmes liés au traitement des requêtes simultanées, il faut modifier la configuration du gestionnaire de processus. La matrice suivante est un bon point de départ :

Mémoire système (MB)4096614481921638432768
pm.max_children20406080120
pm.min_spare_servers713202740
pm.max_spare_servers20406080120
pm.start_servers713202740
Estimation de la mémoire consommée (MB)12802562384251207668

Pour aller plus loin : Apache2 and php fpm performance optimization — Step-by-step guide | by Sebastian Buckpesch | Medium