web-dev-qa-db-fra.com

Comment résoudre l'erreur de dépassement de délai critique du travailleur de Gunicorn?

J'ai utilisé nginx et gunicorn pour héberger mon site Web sur deux serveurs,

Les deux serveurs ont les mêmes versions de packages et le site Web est hébergé avec succès,

Mais dans l'un de mes serveurs, Gunicorn a toujours un délai d'expiration et j'obtiens une erreur

[CRITICAL]Worker Timeout
Booting worker with pid
Worker cannot boot with pid

Et après cela, j'obtiens une erreur 502 Badgateway dans la page Web. Je dois redémarrer le processus gunicorn pour afficher le site Web.

Voici le journal des erreurs:

2014-02-16 14:29:53 [1267] [CRITICAL] WORKER TIMEOUT (pid:4994)
2014-02-16 14:29:53 [1267] [CRITICAL] WORKER TIMEOUT (pid:4994)   
2014-02-16 14:29:53 [22140] [INFO] Booting worker with pid: 22140

Et je reçois une erreur continue comme celle-ci,

2014-02-16 14:29:53 [22140] [DEBUG] Ignoring EPIPE
Ignoring EPIPE
2014-02-16 14:29:53 [22140] [DEBUG] Ignoring EPIPE
Ignoring EPIPE
2014-02-16 14:29:57 [22140] [DEBUG] Ignoring EPIPE
Ignoring EPIPE

Et le travailleur recommence,

2014-02-16 14:32:44 [1267] [CRITICAL] WORKER TIMEOUT (pid:4993)
2014-02-16 14:32:44 [1267] [CRITICAL] WORKER TIMEOUT (pid:4993)
2014-02-16 14:32:44 [22276] [INFO] Booting worker with pid: 22276

Encore une fois Ignorer l'erreur EPIPE et cela continue jusqu'à ce que je redémarre le gunicorn. Et quand je reçois cette erreur, je reçois une erreur de passerelle 504 de nginx

34
s.m

Pour résoudre ce problème, augmentez l'indicateur de délai d'expiration dans Nginx,

Dans Nginx, augmentez proxy_connect_timeout et proxy_read_timeout, vous pouvez ajouter ce qui suit dans le fichier nginx.conf sous la directive http. Ils par défaut à 60s.

proxy_connect_timeout 300s;

proxy_read_timeout 300s;

Redémarrez le serveur Nginx. Voir documents nginx sur les délais d'attente .

Si le correctif ci-dessus ne fonctionne pas, augmentez l'indicateur de délai d'expiration Gunicorn dans la configuration Gunicorn, le délai d'expiration Gunicorn par défaut est de 30 secondes.

- timeout 90

Documentation Gunicorn sur le timeout

-t INT, --timeout INT 30 Les travailleurs silencieux pendant plus de ces secondes sont tués et redémarrés.

Généralement réglé sur trente secondes. Ne fixez cette valeur sensiblement plus haut si vous êtes sûr des répercussions pour les travailleurs de synchronisation. Pour les travailleurs non synchronisés, cela signifie simplement que le processus de travail est toujours en communication et n'est pas lié à la durée requise pour traiter une seule demande.

Gunicorn Docs on Worker Timeouts

J'espère que cela le résoudra.

34
sreekanth