53 votes

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

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

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

Mais sur l'un de mes serveurs, gunicorn obtient toujours un temps d'attente 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 sur la page web. Je dois redémarrer le processus gunicorn pour remettre le site en ligne.

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 continue à obtenir des erreurs 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 worker redémarre,

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 erreur Ignoring EPIPE et cela continue jusqu'à ce que je redémarre gunicorn. Et quand j'ai cette erreur, j'obtiens une erreur 504 gateway de nginx

52voto

sreekanth Points 541

Pour résoudre ce problème, augmentez le drapeau de délai d'attente 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. Par défaut, ils sont définis à 60 secondes.

proxy_connect_timeout 300s;

proxy_read_timeout 300s;

Redémarrez le serveur Nginx. Voir la documentation de Nginx sur les délais d'attente.

Si la solution ci-dessus ne fonctionne pas, augmentez le drapeau de délai d'attente de Gunicorn dans la configuration de Gunicorn. Par défaut, le délai d'attente de Gunicorn est de 30 secondes.

--timeout 90

Documentation de Gunicorn sur le délai d'attente

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

Généralement fixé à trente secondes. Ne le définissez que sensiblement plus élevé si vous êtes sûr des conséquences pour les travailleurs synchrones. Pour les travailleurs asynchrones, cela signifie simplement que le processus du travailleur communique toujours et n'est pas lié à la durée nécessaire pour traiter une seule requête.

Docs de Gunicorn sur les délais des travailleurs

En espérant que cela résolve le problème.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X