我的应用程序使用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错误。
我总是在~4s之后得到这个错误。
然而,我不知道如何防止这个问题。我尝试在我的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秒之间。
希望你能帮助我:)
在此之前非常感谢。
发布于 2017-07-30 04:27:05
可能的情况是,当你上传东西时,你会使用分块编码。有一个uWSGI选项--chunked-input-timeout,默认情况下为4秒(它defaults为--socket-timeout的值,即4秒)。
虽然理论上问题可能出在其他地方,但我建议您尝试上述方法。另外,恼人的异常也是我为什么
ignore-sigpipe=true
ignore-write-errors=true
disable-write-exception=true在我的uWSGI配置中(请注意,我提供了3个选项,而不是2个):
ignore-sigpipe使uWSGI不显示SIGPIPE错误;ignore-write-errors使其不显示错误,例如使用disable-write-exception;SIGPIPE阻止写入时生成OSError。发布于 2020-01-13 19:51:32
在我的例子中,Nginx作为uwsgi的后端代理,配置http-timeout将服务器设置为在长时间运行的请求中正常等待。
请记住,nginx代理声明中包含以下选项:
proxy_read_timeout 300s;
proxy_connect_timeout 300s;
proxy_send_timeout 300s;我们对网关超时不执行任何操作。
发布于 2020-11-27 15:18:00
我在我的uwsgi.ini配置中添加了[socked-timeout=xxx],它起作用了。
https://stackoverflow.com/questions/36156887
复制相似问题