uWSGI引发OSError:大请求期间的写入错误

2024-04-24 13:16:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我的应用程序使用nginx,服务器端有uWSGI。当我执行一个大请求(响应时间为4秒)时,将显示以下内容:

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 log(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.in I)中设置这些参数:

buffer-size=8192
ignore-sigpipe=true
ignore-write-errors=true

在尝试优化响应时间之前,我希望这个问题有一个解决方案。我找不到在另一个岗位工作的人。我处理大量数据,因此在某些情况下,我的响应时间将在4-10秒之间

希望你能帮助我:)

提前多谢了。


Tags: logurlsizeresponse时间timeoutnginxerror
1条回答
网友
1楼 · 发布于 2024-04-24 13:16:51

当你上传东西的时候,你可能会使用分块编码。 有uWSGI选项 ^{}, 默认为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使它不显示错误 e、 g.uwsgi_response_writev_headers_and_body_do
  • disable-write-exception防止 OSError写入时生成。

相关问题 更多 >