如何将此 Nginx 调试到 uWSGI 超时?

sky*_*ler 5 python nginx wsgi uwsgi

我正在运行一个接收很少流量的数据库支持的网站。但是,一天一两次,请求会超时,我会在 Nginx 中看到这个(或类似的)错误error.log

2013/06/13 18:32:40 [error] 16723#0: *27796 upstream timed out (110: Connection timed out)
while reading response header from upstream, client: 199.71.215.214, server:
app.mypythonwebapp.com, request: "POST /api?submit_staker_response HTTP/1.1", upstream:
"uwsgi://unix:/var/run/uwsgi/app.mypythonwebapp.com-uwsgi.sock", host:
"app.mypythonwebapp.com", referrer:
"https://app.mypythonwebapp.com/survey/5/791/70ea73eb9a489f2dead804a95c400ab2"
Run Code Online (Sandbox Code Playgroud)

我正在运行 uWSGI 并且在它的日志文件中根本没有任何与此相关的内容(我可以说)。我怀疑它可能与 PostgreSQL 相关,但如果我通过检查它的状态,pg_stat_activity我看不到任何异常。

这是我的 uWSGI YAML 配置文件:

uwsgi:
    socket: /var/run/uwsgi/%n-uwsgi.sock
    workers: 5
    buffer-size: 32768
    callable: app
    wsgi-file: /opt/sites/app.mypythonwebapp.com/run.py
    virtualenv: /opt/virtualenv/app.mypythonwebapp.com
    pythonpath: /opt/sites/app.mypythonwebapp.com
Run Code Online (Sandbox Code Playgroud)

我所在的服务器有两个(虚拟化)内核,所以我做了 1 + cores*2 来确定工作人员的数量。我还提高了buffer-size参数以尝试解决此问题,但错误仍然发生。

我不确定从哪里开始调试。我几乎没有运行 uWSGI(或任何 Python WSGI 实现)的经验。

小智 4

触发超时的选项(在nginx中)是

http://wiki.nginx.org/HttpUwsgiModule#uwsgi_read_timeout

它的默认值为 60 秒,因此如果您的请求在该时间片内没有生成输出,nginx 将关闭连接。

如果你没有在uWSGI中看到错误(我认为是由于nginx断开连接而导致的“断管”),我会调查为什么生成如此慢