您使用的uWSGI是否真的在工作max-requests-delta?


结论

如果您不加考虑地将其放入pip中,它将无法正常工作。
您不仅要阅读网上的文章或阅读官方手册,还必须正确阅读所采用版本的来源,并且必须正确验证操作。
由于种种想法,我搬到了Gunicorn。

起源

当前,uWSGI用于我参与的项目中,当我进行调整以提高性能时,有时会在不确定的时间频繁发生错误。

研究

有时所有uWSGI进程几乎同时关闭。
有一个名为max-requests的设置,将重新处理处理此选项中指定的阈值请求的工作程序。
由于uWSGI可以启动并运行与指定数量的工作程序一样多的进程,因此我认为工作程序的数量应与内核的数量一样多。
由于uWSGI试图将工作平均分配给多个工作人员,因此很可能在一定程度上同时到达此max-requests,并且在这种情况下,uWSGI将不接受任何请求。
例如,如果前端为nginx,则将出现暂时的502错误风暴。
作为解决此问题的方法,有一个名为max-requests-delta的选项。

例如,在以下文章中对其进行了说明。
https://qiita.com/wapa5pow/items/f4326aed6c0b63617ebd

此选项在uwsgi手册中进行了说明。
https://uwsgi-docs.readthedocs.io/zh-CN/latest/Options.html?highlight=max-requests-delta#max-requests-delta

解释是将(worker_id * delta)添加到每个worker的max_requests值中,并且通过设置此选项,可以消除某些进程同时被多次杀死(如果未完成)。

此选项在uWSGI中设置。
スクリーンショット 2019-02-22 7.28.03.png

以下是撰写本文时最新提交ID的相关部分。
https://github.com/unbit/uwsgi/blob/f17bdbd1b59565a0d6e81e7b825ee6e08ec8e29e/core/uwsgi.c#L299

乍一看,它似乎可以使用,但是如果要从最新的master分支构建自己,则可以使用它。

目前,uWSGI的最新版本是2.0.18,但是如果您转至源代码,则没有这样的选项。
スクリーンショット 2019-02-22 7.29.33.png

https://github.com/unbit/uwsgi/blob/2.0.18/core/uwsgi.c#L275-L276

期权本身已经存在了五年,但令人担忧的是它不稳定。

スクリーンショット 2019-02-22 7.31.23.png

结束