Escribí una aplicación WSGI simple (usando Flask) servida por uWSGI (es decir, ningún otro servidor HTTP excepto uWSGI) que solo admite una única ruta PUT mediante la cual los clientes pueden cargar un archivo (potencialmente ~ 400 MB de tamaño), procesarlo en el servidor y luego enviado de vuelta.
En los registros de uWSGI, noté dos tipos de errores de tiempo de espera después de un tiempo. Por lo general, es un tiempo de espera al enviar la respuesta:
Feb 02 20:46:30 myserv uwsgi[18948]: uwsgi_response_sendfile_do() TIMEOUT !!! Feb 02 20:46:30 myserv uwsgi[18948]: OSError: write error Feb 02 20:46:30 myserv uwsgi[18948]: [pid: 18954|app: 0|req: 1795/3935] aa.bb.cc.dd () {32 vars in 455 bytes} [Fri Feb 2 20:46:06 2018] PUT /sample.exe => generated 0 bytes in 24314 msecs via sendfile() (HTTP/1.1 200) 6 headers in 258 bytes (3353 switches on core 0)A veces, sin embargo, también es un tiempo de espera cuando se recibe una solicitud PUT:
Feb 03 20:18:32 signserv uwsgi[18948]: [pid: 18953|app: 0|req: 2975/5670] aa.bb.cc.dd () {32 vars in 455 bytes} [Sat Feb 3 20:18:02 2018] PUT /samplefile.exe => generated 0 bytes in 29499 msecs via sendfile() (HTTP/1.1 200) 6 headers in 258 bytes (2930 switches on core 0) Feb 03 20:20:30 signserv uwsgi[18948]: [uwsgi-body-read] Timeout reading 16384 bytes. Content-Length: 354414781 consumed: 0 left: 354414781Algunas depuraciones sugieren que esto suele ocurrir con clientes que son muy lentos (es decir, que tienen una carga elevada).
Me gustaría aliviar esto aumentando algunos tiempos de espera, pero uWSGI parece admitir una gran cantidad de tiempos de espera y no tengo claro cuáles de ellos son relevantes aquí. Identifiqué tres tiempos de espera que parecen querer aumentarlos, pero tengo problemas para encontrar documentación sobre cómo difieren:
socket-timeouthttp-timeoutharakiri¿Alguien puede arrojar algo de luz sobre lo que afectan estos tiempos de espera, cuáles son sus valores predeterminados y cuáles (si corresponde) de ellos deben ajustarse para evitar los problemas mencionados anteriormente?
En términos simples, el harakiri es el tiempo de espera de uWSGI y el tiempo de espera de http o el tiempo de espera del socket es un tiempo de espera del servidor proxy/equilibrador.
Cuando estos parámetros difieren, puede haber confusión en los registros.