uwsgi: OSError: write error during GET request
uwsgi: OSError: write error during GET request
这是我将应用程序放入长 运行 时收到的错误日志。
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
此外,我需要详细了解 os 写入错误和管道损坏的原因。
之前遇到过类似的问题,当客户端发出请求然后关闭它时发生(因为服务器响应时间太长或客户端已中断)但是uwsgi仍在处理该请求。
从 Tags 我注意到你使用的是 nginx+uwsgi 配置,有多种方法可以解决这个问题:
- 找到你最耗时的请求并在 nginx 和
uwsgi(切腹)。请注意,当客户端本身中断时,这不起作用。
- 在你的 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 的工具(如果您正在使用类似的工具)。
这是我将应用程序放入长 运行 时收到的错误日志。
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
此外,我需要详细了解 os 写入错误和管道损坏的原因。
之前遇到过类似的问题,当客户端发出请求然后关闭它时发生(因为服务器响应时间太长或客户端已中断)但是uwsgi仍在处理该请求。
从 Tags 我注意到你使用的是 nginx+uwsgi 配置,有多种方法可以解决这个问题:
- 找到你最耗时的请求并在 nginx 和 uwsgi(切腹)。请注意,当客户端本身中断时,这不起作用。
- 在你的 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 的工具(如果您正在使用类似的工具)。