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
strace -p <PID> -e trace=network -t
Réponses:
Pour résoudre ce problème, augmentez l'indicateur de délai d'expiration dans Nginx,
Dans Nginx augmenter
proxy_connect_timeout
etproxy_read_timeout
, vous pouvez ajouter ce qui suit dans le fichier nginx.conf sous lahttp
directive. Ils par défaut à 60s.proxy_connect_timeout 300s;
proxy_read_timeout 300s;
Redémarrez le serveur Nginx. Voir les 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 par défaut de Gunicorn est de 30 secondes.
- timeout 90
Documentation de Gunicorn sur le timeout
-t INT, --timeout INT 30 Les travailleurs silencieux pendant plus de ce nombre de 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.
la source