152 votes

Erreur de temporisation du travailleur Gunicorn

J'ai mis en place gunicorn avec 3 travailleurs: 30 connexions de travail et utilisation de la classe de travail Eventlet. Il est installé derrière Nginx. Après toutes les quelques demandes, je le vois dans les journaux.

 [ERROR] gunicorn.error: WORKER TIMEOUT (pid:23475)
None
[INFO] gunicorn.error: Booting worker with pid: 23514
 

Pourquoi cela arrive-t-il? Comment puis-je savoir ce qui ne va pas?

Merci

129voto

Amit Talmor Points 221

Nous avons eu le même problème avec Django + nginx + gunicorn. À partir de la documentation de Gunicorn, nous avons configuré le délai d’attente qui ne faisait presque aucune différence.

Après quelques tests, nous avons trouvé la solution, le paramètre à configurer est le suivant: timeout (et non pas le délai nécessaire). Cela fonctionne comme une horloge ..

Alors faites:

1) ouvrez le fichier de configuration gunicorn

2) réglez le TIMEOUT sur tout ce dont vous avez besoin - la valeur est exprimée en secondes

 NUM_WORKERS=3
TIMEOUT=120

exec gunicorn ${DJANGO_WSGI_MODULE}:application \
--name $NAME \
--workers $NUM_WORKERS \
--timeout $TIMEOUT \
--log-level=debug \
--bind=127.0.0.1:9000 \
--pid=$PIDFILE
 

18voto

gwik Points 154

Exécutez Gunicorn avec --log-level=DEBUG .

Il devrait vous donner une trace de la pile de l'application.

9voto

Ranc Points 11

Est-ce que ça pourrait être ça? http://docs.gunicorn.org/en/latest/configure.html#timeout

D'autres réponses pourraient être votre réponse prend trop de temps ou est en attente bloquée.

6voto

Dseed Points 25

Vous avez besoin d'utiliser un autre travailleur de type classe async l'un comme gevent ou tornade voir ce pour plus d'explication : Première explication :

Vous pouvez également installer Eventlet ou Gevent si vous vous attendez à ce que votre code d'application peut avoir besoin de vous arrêter pour de longues périodes de temps au cours du traitement de la requête

Deuxième :

La valeur par défaut synchrone travailleurs supposons que votre application est une ressource liée en termes de CPU et de bande passante réseau. Généralement, cela signifie que votre application ne devrait pas faire quelque chose qui prend un indéfini laps de temps. Par exemple, une demande pour l'internet répond à ce critère. À un certain point le réseau externe échoue dans une telle manière que les clients s'accumule sur vos serveurs.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X