【发布时间】:2016-07-09 11:42:12
【问题描述】:
我的应用程序使用 nginx,在服务器端使用 uWSGI。当我做一个大请求(响应时间> 4s)时,会出现以下内容:
SIGPIPE: writing to a closed pipe/socket/fd (probably the client
disconnected) on request _URL_ (ip XX.XX.XX.XX) !!!
uwsgi_response_writev_headers_and_body_do(): Broken pipe
[core/writer.c line 287] during GET _URL_ (XX.XX.XX.XX)
OSError: write error
似乎 uWSGI 尝试写入流,但该流已被关闭。 当我检查 nginx 日志(error.log)时:
upstream prematurely closed connection while reading response
header from upstream ...
当然,我的客户端(REST 客户端或浏览器)收到 502 错误。
我总是在 ~4 秒后得到这个错误。
但是,我不知道如何防止此问题。 我尝试在我的 nginx 配置文件中设置一些参数:
location my_api_url {
[...]
uwsgi_buffer_size 32k;
uwsgi_buffers 8 32k;
uwsgi_busy_buffers_size 32k;
uwsgi_read_timeout 300;
uwsgi_send_timeout 300;
uwsgi_connect_timeout 60;
}
但问题仍然存在。 我也尝试在uWSGI配置文件(wsgi.ini)中设置这些参数:
buffer-size=8192
ignore-sigpipe=true
ignore-write-errors=true
在尝试优化响应时间之前,希望这个问题有解决方案。我没有找到在另一篇文章中工作的人。我处理大量数据,因此我的响应时间在某些情况下会在 4-10 秒之间。
希望你能帮助我:)
非常感谢。
【问题讨论】:
-
你是 NGINX 背后的代理还是什么?通常在客户端抢先关闭连接时会发生写入错误。