我的应用程序是一个 uwsgi+django 设置。我用gevent做性能测试,并发运行1200个请求。此时,uwsgi 将抛出一个 IO 错误并显示以下日志消息:
uwsgi_response_write_body_do(): Broken pipe [core/writer.c line 260]
IOError: write error
姜戈 1.4.0
uwsgi:1.9.13
蟒蛇:2.6
TCP 侦听队列:1000
这个破管错误的原因是什么?
原文由 linbo 发布,翻译遵循 CC BY-SA 4.0 许可协议
当 NGINX 开始向 uWSGI 发出请求但 uWSGI 响应时间过长,然后 NGINX 关闭与 uWSGI 的连接时,就会发生这种情况。当 uWSGI 最终完成时,它试图将它的响应返回给 NGINX,但是 NGINX 更早地关闭了连接,所以 uWSGI 抛出了一个 I/O 错误。
所以这可能意味着你的 uWSGI 进程花费的时间太长了。
更新:
如果你想,uWSGI 的 Harakiri 模式可能有助于自动终止如此耗时的进程: https ://uwsgi-docs.readthedocs.io/en/latest/FAQ.html#what-is-harakiri-mode 你可能不想这样做是因为一个进程可能正在完成一些长查询或可能需要的东西。