This looks like a well-known issue with Nginx+uWSGI timeouts, but my setup is different and I couldn't find information about it.
I run a Flask app on uWSGI, on http protocol (not sockets). When I query my API, sometimes I receive an error:
uwsgi_response_write_body_do() TIMEOUT !!! IOError: : write error
I receive it more often during "business hour", i.e. not so often at night. I'm querying for long JSON data (geo coordinates, up to 50 MBytes) and sometimes I get no response at all, and sometimes I get part of the response. These are errors from Python's
requests.exceptions.ConnectionError: ('Connection aborted.', error(104, 'Connection reset by peer')) requests.exceptions.ChunkedEncodingError: ('Connection broken: IncompleteRead(0 bytes read)', IncompleteRead(0 bytes read)) ValueError: Expecting object: line 1 column 5590371 (char 5590370) ValueError: Unterminated string starting at: line 1 column 20998536 (char 20998535) ValueError: end is out of bounds # when I set `timeout=None` in Python requests.exceptions.ReadTimeout: HTTPConnectionPool(host='mydomain.com', port=80): Read timed out. (read timeout=None)
The connection is over plain HTTP (no S). My uWSGI config below:
[uwsgi] module = run:app pidfile = /tmp/app.pid logto = /var/log/uwsgi/%n.log master = true processes = 2 http-socket = 0.0.0.0:someport http-timeout = 300 die-on-term = true
And I run this using
uwsgi /path/to/inifile. There is no Nginx, but actually before, with Nginx, I was receiving same problems. So I ruled out this one.
How can I avoid these timeouts?