我正在运行一个数据库支持的网站,该网站的流量很少。但是,每天有一两次请求会超时,我会在 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 断开连接导致“管道损坏”),我会调查为什么生成速度如此之慢