OVH Community, votre nouvel espace communautaire.

[PHP5-FPM] Erreur 502 Bad Gateway


micro_maniaque
06/01/2016, 02h43
Bonjour janus57,

Merci pour votre conseil de modifications des processus en cours j'ai augmenté progressivement les processus et le site fonctionne parfaitement le seul soucis est le serveur MariaDB qui aime pas beaucoup le nombre de requêtes vers la DB mais ce problème vient d'une erreur de codage du site web.

Merci beaucoup pour votre aide.

Cordialement
micro_maniaque

janus57
02/01/2016, 12h16
Bonjour,

autre idée intéressante si y a plusieurs site sur la même machine 1 service PHP-FPM par site donc 1 process "master" par site qui fait spawn uniquement pour les sites concernés (si pas déjà fait).

Autre avantage, chaque site à son propre opache bien distinct ce qui permet un tuning plus poussé.

Cordialement, janus57

sich
02/01/2016, 11h46
si si, c'est ce que je fais au final (le fait de mettre + de process en std by). Mais j'ai déjà pu constater des ralentissements sur un site où l'activité grimpe d'un coup. D'où l'obligation de mettre un paquet de process en attente juste pour éviter ces soucis... Si on pouvait dire à php-fpm de spawn les process par 50 ou 100 quand il atteint sa limite ça serait intéressant.

Mais bon, faut savoir aussi que php-fpm consomme assez peu de process en fait et est capable de traiter bcp de visiteurs sans avoir besoin de monter à 50 process... Généralement bcp de sites peuvent se contenter de tourner avec très peu de process.

Faudrait que je test le "on demand" aussi pour voir comment ça se comporte.

janus57
02/01/2016, 11h03
Citation Envoyé par sich
oui php-fpm spawn très lentement les nouveaux process...
Quand tu sais que tu risques d'avoir des gros pics d'activité il ne faut pas hésiter à monter le nombre de process en attente pour que le serveur soit "prêt" au cas où.
Mais comme le dit Janus il faut faire attention à la conso ram dans ce cas.

D'ailleurs si quelqu'un sait comment dire à php-fpm de spawn 50 process d'un coup au lieu de 5 je suis preneur.
Bonjour,

pour un seul site ou plusieurs avec différentes pool PHP-FPM ?

Sinon en augmentant le "pm.min_spare_servers" cela ne peu pas compenser le fait que PHP-FPM fait spawn les process un peu lentement ?

Cordialement, janus57

sich
02/01/2016, 09h11
oui php-fpm spawn très lentement les nouveaux process...
Quand tu sais que tu risques d'avoir des gros pics d'activité il ne faut pas hésiter à monter le nombre de process en attente pour que le serveur soit "prêt" au cas où.
Mais comme le dit Janus il faut faire attention à la conso ram dans ce cas.

D'ailleurs si quelqu'un sait comment dire à php-fpm de spawn 50 process d'un coup au lieu de 5 je suis preneur.

janus57
02/01/2016, 08h41
Bonjour,

en plus du potentiel problème de socket je vois dans les logs de PHP-FPM que vous avez atteint votre limite :
[27-Dec-2015 19:46:23] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 8 children, there are 0 idle, and 32 total children
[27-Dec-2015 19:46:24] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 16 children, there are 0 idle, and 37 total children
[27-Dec-2015 19:46:25] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 0 idle, and 42 total children
[27-Dec-2015 19:46:26] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 0 idle, and 47 total children
[27-Dec-2015 19:46:27] WARNING: [pool www] server reached pm.max_children setting (50), consider raising it
En conséquence j'ajusterais votre config PHP-FPM comme ceci perso :
Code:
pm = dynamic

; The number of child processes to be created when pm is set to 'static' and the
; maximum number of child processes when pm is set to 'dynamic' or 'ondemand'.
; This value sets the limit on the number of simultaneous requests that will be
; served. Equivalent to the ApacheMaxClients directive with mpm_prefork.
; Equivalent to the PHP_FCGI_CHILDREN environment variable in the original PHP
; CGI. The below defaults are based on a server without much resources. Don't
; forget to tweak pm.* to fit your needs.
; Note: Used when pm is set to 'static', 'dynamic' or 'ondemand'
; Note: This value is mandatory.
pm.max_children = 200

; The number of child processes created on startup.
; Note: Used only when pm is set to 'dynamic'
; Default Value: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
pm.start_servers = 20

; The desired minimum number of idle server processes.
; Note: Used only when pm is set to 'dynamic'
; Note: Mandatory when pm is set to 'dynamic'
pm.min_spare_servers = 20

; The desired maximum number of idle server processes.
; Note: Used only when pm is set to 'dynamic'
; Note: Mandatory when pm is set to 'dynamic'
pm.max_spare_servers = 40

; The number of seconds after which an idle process will be killed.
; Note: Used only when pm is set to 'ondemand'
; Default Value: 10s
;pm.process_idle_timeout = 10s;
 
; The number of requests each child process should execute before respawning.
; This can be useful to work around memory leaks in 3rd party libraries. For
; endless request processing specify '0'. Equivalent to PHP_FCGI_MAX_REQUESTS.
; Default Value: 0
pm.max_requests = 500
Par contre là il va falloir bien surveiller l'utilisation RAM vu que l'on passe de 50 à 200.

P.S. je le nommerais autre chose que www au passage.

Cordialement, janus57

micro_maniaque
02/01/2016, 02h58
Bonjour,

Voici les logs de PHP5-FPM: http://hastebin.com/ikifecocog.vhdl

Merci janus57 pour votre aide.
Je vous redonne des nouvelles le plus tôt possible.

Cordialement
micro_maniaque

janus57
02/01/2016, 00h12
Bonjour,

que donne les logs PHP-FPM ?

Vous avez modifié la config pour prendre en compte plus de connexion sur les socket (par défaut la limite est 128connexions) ?

Dans la config PHP-FPM il est conseillé de dé-commenter cette ligne : listen.backlog = 65535

Pour les socket voici comment augmenter la limite à 1024 (suffisant ici) :
/etc/sysctl.conf
Code:
net.core.somaxconn = 1024
Cordialement, janus57

micro_maniaque
01/01/2016, 23h31
Bonjour,

Après une migration d'un serveur VPS 2014 à VPS 2016 Cloud qui c'est très bien passé. Je rencontre un problème avec php5-fpm. Lorsque php5-fpm traite énormément de requêtes une erreur 502 apparaît qui bloque tous le trafic de mon site web, ou parfois l'erreur apparaît quand nous recevons une attaque de bots sur notre infrastructure web.


Voici les informations techniques:

Type de serveur: VPS
Gamme: Cloud 2016
Cores: 2
Ram: 4 Go DDR3
Bande Passante: 100 mbps
Adresse ip: 51.254.121.65
DNS: Cloudflare

Nginx Version: 1.6.2-5
PHP5-FPM Version: 5.6.14+dfsg-0+deb8u
MariaDB Version: 10.0.23+maria-1~whe

Visiteurs visitant le site lors du crash: 125 visiteurs

logs d'accès (partiel) /var/log/nginx/badblock.fr/access_log: http://hastebin.com/adodagizax.mel
logs d'erreurs (partiel) /var/log/nginx/badblock.fr/error_log: http://hastebin.com/oluvadalum.vbs

Configurations php5-fpm /etc/php5/fpm/pool.d/www.conf: http://hastebin.com/edoxilafot.vhdl
Configurations nginx /etc/nginx/nginx.conf: http://hastebin.com/qelicefafu.nginx

Voici un screenshot:


Merci de votre aide.

Cordialement
micro_maniaque