W . A . X . O
ncc-1701
LINUX - UNIX




PHP-FPM OPTIMISATION



RESSOURCES PHP-FPM

OPTIMISATION DU MOTEUR PHP-FPM

    1 - LES PARAMETRES D'OPTIMISATION

  • PM : Process Manager
  • Le paramètre "pm" définit la mode de fonctionnement des process FPM.
  • static : nombre fixe de processus (concurrent requis constant)
  • dynamic : s’adapte à la charge (le plus courant)
  • ondemand : ne crée de processus que sur requête
    pm = dynamic
    
  • Paramètres liés à pm = dynamic
  • pm.max_children : nombre maximal de processus PHP (important)
  • start_servers : nombre de processus au démarrage
  • min_spare_servers / max_spare_servers : fourchette des "processus dormants"
    pm.max_children = 20
    pm.start_servers = 5
    pm.min_spare_servers = 3
    pm.max_spare_servers = 10
    

    2 - OPTIMISATION

  • 1 - Mesurer la situation : observer la mémoire moyenne d’un process PHP-FPM 8.4
    ps -ylC php-fpm8.4 --sort:rss | awk '{ SUM += $8 } END { print SUM/NR/1024 " MB" }'
    
  • Exemple de retour : 25 Mo
    benoit@uaf-gandi2:~$ ps -ylC php-fpm8.4 --sort:rss | awk '{ SUM += $8 } END { print SUM/NR/1024 " MB" }'
    25.0234 MB
    
  • 2 - Exemple de configuration pour un serveur mutualisé avec 8 Go de RAM
    pm = dynamic
    pm.max_children = 25
    pm.start_servers = 20
    pm.min_spare_servers = 10
    pm.max_spare_servers = 30
    
  • Si on souhaite attribuer 1 Go de RAM au process PHP-FPM 8.4, il faut fixer le paramètre "pm.max_children" selon la formule suivante.
    pm.max_children = 1024 / 40 = 25,6
    
    pm.max_children = 25
    

    3 - SURVEILLER LA CHARGE PHP-FPM D'UN SITE WEB

  • FPM intégère une instruction qui permet d'obtenir les informations de charge du processus PHP-FPM en cours.
  • Le principe est simple : 2 étapes :
  • a) Il faut activer la disponibilité de l'instruction dans la configuration du PHP-FPM en question.
    sudo vi /etc/php/8.4/fpm/pool.d/www.conf
    pm.status_path = /status
    sudo /etc/init.d/php8.4-fpm restart
  • b) Configurer le vhost afin de sécuriser l'accès aux informations de surveillance de charge.
        Location "/status">
            SetHandler "proxy:unix:/var/run/php/php8.4-fpm.sock|fcgi://localhost/"
            Require ip 92.243.21.70
        /Location>
    
  • c) Lire les informations de status via un navigateur depuis l'@ip autorisée.
    lynx https://kornog.anakrys.biz/status
    curl https://kornog.anakrys.biz/status
    benoit@uaf-gandi2:~$ curl https://kornog.anakrys.biz/status
    pool:                 www
    process manager:      dynamic
    start time:           01/Apr/2026:15:17:36 +0200
    start since:          3566
    accepted conn:        678
    listen queue:         0
    max listen queue:     0
    listen queue len:     0
    idle processes:       11
    active processes:     1
    total processes:      12
    max active processes: 11
    max children reached: 0
    slow requests:        0
    memory peak:          50331648