为什么 Nginx 中的“multi_accept”默认为“off”?

为什么 Nginx 中的“multi_accept”默认为“off”?

我发现 Nginx 中 'multi_accept' 默认是 'off',如下所示:

multi_accept

答案1

可能是因为启用后,所有工作进程都处于活动状态并尝试同时处理所有传入请求。禁用后,Nginx 会决定哪个子进程逐个处理请求。由于 Nginx 在这方面非常高效,因此这可能对大多数人来说都很适用。有些人认为启用它有风险,因为它可能会用请求淹没工作进程连接。您在操作系统级别的 TCP 设置也可能会影响这一点。

答案2

multi_accept off:一个工作进程只接受一个连接,处理它,然后返回到内核以处理下一个事件。

multi_accept on:工作者将accept循环执行,直到它EAGAIN最终得到结果。如果有大量连接,通过切断需要额外内核参与的事件处理,这可能会有所帮助。但如果传入连接不是那么多,那么EAGAIN就会经常受到打击,比如1:1比率。这种方法还可能导致连接处理不平衡,特别是当它们不定期到达且未SO_REUSEPORT被使用时。

总而言之 — — 它有点“黑客”,可能根本不值得摆弄它,但旋钮仍然在那里 — — 以防万一它可能会有所帮助。

主要基于解释作者 Valentin Bartenev,nginx-ru 邮件列表。

相关内容