我发现 Nginx 中 'multi_accept' 默认是 'off',如下所示:
答案1
可能是因为启用后,所有工作进程都处于活动状态并尝试同时处理所有传入请求。禁用后,Nginx 会决定哪个子进程逐个处理请求。由于 Nginx 在这方面非常高效,因此这可能对大多数人来说都很适用。有些人认为启用它有风险,因为它可能会用请求淹没工作进程连接。您在操作系统级别的 TCP 设置也可能会影响这一点。
答案2
multi_accept off
:一个工作进程只接受一个连接,处理它,然后返回到内核以处理下一个事件。
multi_accept on
:工作者将accept
循环执行,直到它EAGAIN
最终得到结果。如果有大量连接,通过切断需要额外内核参与的事件处理,这可能会有所帮助。但如果传入连接不是那么多,那么EAGAIN
就会经常受到打击,比如1:1
比率。这种方法还可能导致连接处理不平衡,特别是当它们不定期到达且未SO_REUSEPORT
被使用时。
总而言之 — — 它有点“黑客”,可能根本不值得摆弄它,但旋钮仍然在那里 — — 以防万一它可能会有所帮助。
主要基于解释作者 Valentin Bartenev,nginx-ru 邮件列表。