He usado nginx y gunicorn para alojar mi sitio web en dos servidores,
Ambos servidores tienen las mismas versiones de paquetes y el sitio web está alojado correctamente,
Pero en uno de mis servidores, gunicorn siempre tiene tiempo de espera y recibo un error
[CRITICAL]Worker Timeout
Booting worker with pid
Worker cannot boot with pid
Y después de esto recibo el error 502 Badgateway en la página web. Tengo que reiniciar el proceso de gunicorn para abrir el sitio web.
El siguiente es el registro de errores:
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
Y me sale un error continuo como este,
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
Y el trabajador comienza de nuevo,
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
Ignorando nuevamente el error EPIPE y esto continúa hasta que reinicie el gunicorn. Y cuando recibo este error, obtengo un error de puerta de enlace 504 de nginx
strace -p <PID> -e trace=network -t
Respuestas:
Para solucionar este problema, aumente el indicador de tiempo de espera en Nginx,
En Nginx aumenta
proxy_connect_timeout
yproxy_read_timeout
, puede agregar lo siguiente en el archivo nginx.conf bajo lahttp
directiva. Por defecto son 60.proxy_connect_timeout 300s;
proxy_read_timeout 300s;
Reinicie el servidor Nginx. Consulte los documentos de nginx sobre los tiempos de espera .
Si la corrección anterior no funciona, aumente el indicador de tiempo de espera de Gunicorn en la configuración de Gunicorn, el tiempo de espera predeterminado de Gunicorn es de 30 segundos.
- timeout 90
Documentación de Gunicorn sobre el tiempo de espera
-t INT, - timeout INT 30 Los trabajadores en silencio durante más de estos segundos son asesinados y reiniciados.
Generalmente establecido en treinta segundos. Solo configure esto notablemente más alto si está seguro de las repercusiones para los trabajadores de sincronización. Para los trabajadores no sincronizados, solo significa que el proceso de trabajo aún se está comunicando y no está vinculado al tiempo requerido para manejar una sola solicitud.
Documentos de Gunicorn sobre los tiempos de espera de los trabajadores
Espero que esto lo resuelva.
fuente