我正在运行一个数据库支持的网站,只能获得很少的流量.但是,一天或两天,请求将超时,我会在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个核心* 2来确定工作人员的数量.我还提高了buffer-size参数以尝试解决此问题,但错误仍然存在.
我不知道从哪里开始调试这个.我没有运行uWSGI(或任何Python WSGI实现)的经验.
最佳答案
触发超时的选项(在nginx中)是
http://wiki.nginx.org/HttpUwsgiModule#uwsgi_read_timeout
它的默认值是60秒,所以如果你请求不生成输出那个时间片nginx会关闭连接.
如果你没有看到uWSGI中的错误(我想从“断开的管道”中假设nginx断开连接的部分),我会调查为什么生成这么慢