Qelle confjg PHP7.1-FPM pour site moyenne charge ?

Discussion dans 'Administration d'un site Web' créé par ortolojf, 24 Avril 2017.

  1. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    3 022
    J'aime reçus:
    12
    Bonjour

    Mon site ( voir profil ), est le seul site sur mon VPS 2016 SSD de OVH, avec CPU 2vCore, 8 Go RAM et 40 Go SSD.

    Il a 3.600 visites/jour et 1.350 vu/jour.

    J'ai Opcache semble-t-il bien configuré ( merci à Spout ;) ).

    Mon site déclenche également des scripts PHP en mode CLI,

    En effet, mon site forke un process PHP CLI ( très court ) à chaque chargement de page, ( antiaspirateur ).


    J'ai testé les configs suivantes ( approximatives ) de PHP7.1-FPM :

    1- en mode dynamic, start_servers=5, des spare_servers moyennement élevés, max-requests=500, et process_idle_timeout=0; ( valeur par défaut ) :

    Au bout de quelques heures, les process php-fpm sont à 99% du cpu, le site est down.

    A peu près 4 ou 5 processus à 99%.

    2- en mode static, start_servers=50, max_requests=500, même chose ( les php-fpm à 99% cpu et site down ) :

    4 ou 5 processus PHP-FPM à 99%.


    J'essaye à l'instant cette config :

    Code:
    
    # /etc/php/7.1/fp:pool.d/www.conf
     
    listen = /var/run/php/php7.1-fpm.sock
    
    pm = dynamic
    
    pm.max_children = 50
    
    pm.start_servers = 15
    
    pm.min_spare_servers = 5
    
    pm.max_spare_servers = 25
    
    pm.process_idle_timeout = 20s;
    
    ;pm.max_requests = 500
    
    request_terminate_timeout = 30
    
    ;php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f www@my.domain.com
    ;php_flag[display_errors] = off
    ;php_admin_value[error_log] = /var/log/fpm-php.www.log
    ;php_admin_flag[log_errors] = on
    ;php_admin_value[memory_limit] = 32M
    php_admin_value[memory_limit] = 256M
    php_admin_value[session.save_path] = /tmp/
    
    
    Cette fois-ci : max_request=0 ( défaut ), et request_terminate_timeout = 30

    Les deux dernières lignes sont rajoutées, tirées d'un site dont je ne me souviens plus.

    Le total %CPU des process PHP7.1-FPM oscille entre 7% et 28% à peu près.

    Celà n'a pas changé depuis les autres configs.

    Mais, le basculement vers 99% se faisait de manière blocante.

    Pensez-vous que cette fois-ci le site va tenir ?

    Quelle serait la meilleure configuration pour ce VPS ?

    J'ai mis le lien entre Nginx et PHP7.1-FPM par un socket Unix plutôt qu'en TCP-IP, ( port 9000 ), ce je faisais avant ces manips, simplement car j'ai lu sur le net que celà surchargeait la pile réseau.

    Merci beaucoup de vos réponses.

    Amicalement.
     
  2. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    3 022
    J'aime reçus:
    12
    Bonjour

    Avec cette config depuis hier après-midi, le serveur web semble ne pas crasher ni se bloquer.

    Code:
    ; /etc/php/7.1/fpm/pools.d/www.conf
    
    pm = ondemand
    
    pm.max_children = 45
    pm.start_servers = 15
    pm.min_spare_servers = 5
    pm.max_spare_servers = 25
    
    pm.process_idle_timeout = 10s
    pm.max_requests = 300
    pm.status_path = /status
    
    


    J'ai le cache Zend Opcache réglages par défaut, sans cache fichier, mais avec :

    opcache.file_cache_consistency_checks=1

    Celà peut-il avoir un impact par rapport aux blocages ?

    Je penche pour un effet de deadlock entre tables MySQL de l'antiaspirateur.

    Je vais vérifier qu'elles sont en mode Innodb ( pas MyISAM ).

    Merci de vos réponses.

    Respectueusement.
     
  3. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    3 022
    J'aime reçus:
    12
    Bonjour

    L'augmentation à 100% du cpu se produit à 13h30 tous les jours, c'est-à-dire au moment du basculement des courses du lendemain vers les couses du jour.

    Ce basculement est déclenché par la première visite d'un visiteur,et occasionne des lectures/écritures sur des tables MySQL en mode MyISAM, mais également la pose de verrous en écriture sur accès concurrent, probablement la cause des deadlocks.

    Avant, le nombre de visiteurs simultanés était compatible avec ces verrous, mais mon trafic me donne sur Google Analytics, jusqu'à 45/50 visiteurs en temps réel.

    Je ne sais pas quel délai correspond à ces 45/50 visiteurs.

    Seule solution : Déclencher ce basculement par le crontab.

    En attendant, j'y ai mis un script Shell qui redémarre PHP7.1-FMP et Nginx automatiquement à 13h45.

    Amicalement.
     
  4. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    3 022
    J'aime reçus:
    12
    Bonjour

    Le problème venait d'un blocage de deux scripts php, à cause de la migration à PHP 7.1.

    Maintenant ouf c'est réparé, mais avec ces ressources et charges, que me conseilleriez-vous comme config php-fpm dans /etc/php/7.1/fpm/pool.d/www.conf ?

    Ressources : VPS SDD 40 Go SSD, Debian 8 Jessie, 8Go RAM, PHP 7.1 et ZendOpcache.

    Charges : MySQL dépasse rarement 7% cpu, chaque process php-fpm fait dans les 5% à 15% 20% grand maximum ( peu souvent > 12-13% ).

    J'ai : 2300+ visites/jour, 1400 vu/jour, 9 minutes/visite.

    Depuis la réparation complète à midi, le cpu traîne en dessous de 15%, quasiment tout le temps en dessous de 10%.

    Je suis revenu à du dynamic,

    Voici la config actuelle :

    Code:
    
    pm = dynamic
    
    pm.max_children = 15
    
    pm.start_servers = 8
    pm.min_spare_servers = 4
    pm.max_spare_servers = 12
    
    pm.process_idle_timeout = 10s
    
    pm.max_requests = 300
    
    pm.status_path = /status
    
    
    Le max_children est-il trop haut ?

    Le max_requests peut-il être adapté ?

    J'ai peur de tout casser, et que OVH me saque pour dépassement cpu.

    Bien amicalement.
     
  5. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    3 022
    J'aime reçus:
    12
    Rebonjour

    D'après OVH, depuis midi ( heure de la réparation des scripts ), le CPU est < 10% et la RAM < 35%.

    La RAM a toujours été comme çà.

    Le trafic est normal.

    A votre avis, que puis-je améliorer de cette config ?


    Code:
    
    pm = dynamic
    
    pm.max_children = 15
    
    pm.start_servers = 8
    pm.min_spare_servers = 4
    pm.max_spare_servers = 12
    
    pm.process_idle_timeout = 10s
    
    pm.max_requests = 300
    
    pm.status_path = /status
    
    
    Merci beaucoup de vos réponses.

    Respectueusement.
     
  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
    Rejeter la notice