Les demandes ne mettent jamais dans la file d'attente après pm.max_children de Nginx et PHP-FPM

Dès que la piscine atteint pm.max_children, Nginx commence un délai d'attente lorsque vous essayez d'envoyer de nouvelles demandes à PHP-FPM. "max listen queue" Toujours égal 0 Sur la page php-status.

PHP-FPM 5.5.16

Nginx 1.6.1

Voici un exemple de piscine php-fpm:

[example]

catch_workers_output = no

; Configure listener
listen = /var/run/php-fpm/example.sock
listen.backlog = 65535
listen.owner = nginx
listen.group = nginx

; Unix user/group of processes
user = nginx
group = nginx

; Choose how the process manager will control the number of child processes.
pm = ondemand
pm.max_children = 10
pm.max_requests = 200
pm.process_idle_timeout = 30s
pm.status_path = /status

; Pass environment variables
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp

; Host specific php ini settings here
php_admin_flag[log_errors] = on
php_admin_value[open_basedir] = /tmp:/var/www/apc:/var/www/wordpress/example
php_admin_value[error_log] = /var/log/php-fpm/example.log
Invité:

Hannah

Confirmation de:

Étant donné que cette question apparaît toujours parmi des questions qu'il n'y a pas de réponses, je vais essayer de donner une réponse obsolète. Erreur d'affichage - Ceci est un comportement estimé du paramètre pm.max_children selon
http://php.net/manual/en/insta ... n.php
:

Nombre de filiales ... qui sera créé quand pm Construit à dynamique.

Cette option définit la limite sur le nombre de demandes simultanées qui seront desservies.

Toutefois, chaque demande doit être traitée assez rapidement afin que le processus soit libéré pour la prochaine requête. Sinon,

nginx

Probablement signaler «502 Bad Gateway», Dès que plus aucune demande ne peut traiter.

Encore une fois, vérifiez la valeur définie dans

php-fpm

Configuration pour

listen.backlog

. Il détermine la longueur de la file d'attente (
https://myjeeva.com/php-fpm-configuration-101.html
):

Argument backlog Détermine la longueur maximale de la file d'attente.

Cependant, cette valeur est limitée par le système de base. Voir:

sysctl net.core.somaxconn

Autant que je sache, il n'est pas possible de faire la queue de la requête à l'ascension. (

php-fpm

), Si cela provoque une erreur. Néanmoins, vous pouvez spécifier nginx Passer à un autre processus en cas d'erreur. Cela peut provoquer, par exemple, redémarrer sur le côté du client.

Si ce n'est pas le cas

listen-backlog

/

net.core.somaxconn

, alors la question réelle, cependant, c'est pourquoi les demandes bloquent

php-fpm

Processus pendant si longtemps.

Pour répondre aux questions, connectez-vous ou registre