uwsgi:OSError:GET请求期间的写入错误



这是我长期放置应用程序时收到的错误日志。

Oct 22 11:41:18 uwsgi[4613]: OSError: write error
Oct 22 11:41:48 uwsgi[4613]: Tue Oct 22 11:41:48 2019 - uwsgi_response_write_body_do(): Broken pipe [core/writer.c line 341] during GET /api/events/system-alarms/ 
Nov 19 19:11:01 uwsgi[30627]: OSError: write error
Nov 19 19:11:02 uwsgi[30627]: Tue Nov 19 19:11:02 2019 - uwsgi_response_writev_headers_and_body_do(): Broken pipe [core/writer.c line 306] during GET /api/statistics/connected-clients/?type=auto&required_fields=0,11 

另外,我需要详细了解操作系统写入错误和管道损坏的原因。

之前遇到过类似的问题,当客户端发出请求然后关闭它时(因为服务器响应时间太长或客户端已中断(,但 uwsgi 仍在处理该请求。

从标签中我注意到您正在使用nginx + uwsgi配置,有多种方法可以解决此问题:

  • 找到您最耗时的请求,并在nginx和nginx之间进行匹配 乌斯吉(哈拉基里(。请注意,当客户端本身中断时,这不起作用。
  • 在你的nginx配置集上,uwsgi的uwsgi_ignore_client_abort on路线。
  • 或者您可以禁用写入错误的日志记录ignore-write-errors = true.

根据我的经验,这些是合法的断开连接,其中HTTP客户端(浏览器(关闭连接,Nginx反过来关闭uWSGI正在写入响应的文件描述符。

我可以通过访问任何重要的 Django 页面并快速敲击 F5(刷新(键几次来可靠地复制该问题。这表明这些错误是正常操作的一部分,不会造成任何负面的用户体验,因此可以安全地忽略。

要在日志中隐藏这些异常,您需要以下所有三个uWSGI设置:

ignore-sigpipe
ignore-write-errors
disable-write-exception

每个对应于以下错误行之一:

mysite - SIGPIPE: writing to a closed pipe/socket/fd (probably the client disconnected) on request / (ip 1.2.3.4) !!!
mysite - uwsgi_response_writev_headers_and_body_do(): Broken pipe [core/writer.c line 306] during GET / (1.2.3.4)
OSError: write error

如果您使用类似的东西,disable-write-errors选项还可以防止错误发送到像 Sentry 这样的工具。

相关内容

  • 没有找到相关文章

最新更新