我该如何调试这个 Nginx 到 uWSGI 超时?

我该如何调试这个 Nginx 到 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"

我正在运行 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

我使用的服务器有两个(虚拟化)核心,所以我用 1 + cores*2 来确定工作器的数量。我还增加了参数buffer-size来尝试修复这个问题,但错误仍然发生。

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

答案1

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

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

它的默认值是 60 秒,所以如果您的请求在该时间片内没有产生输出,nginx 将关闭连接。

如果你没有在 uWSGI 中看到错误(我猜是因为 nginx 断开连接导致“管道损坏”),我会调查为什么生成速度如此之慢

相关内容