为什么是';接受互斥'';在';作为Nginx中的默认值?
我发现Nginx中默认的“accept_mutex”为“on”,如下所示:为什么是';接受互斥'';在';作为Nginx中的默认值?,nginx,mutex,Nginx,Mutex,我发现Nginx中默认的“accept_mutex”为“on”,如下所示: 那么接受连接需要互斥吗?为什么?想象一些进程在一个端口上侦听,然后在epoll中等待。 如果没有接受互斥,所有进程都将唤醒,但只有一个进程能够接受连接。另一些进程则毫无成效。 这是众所周知的 但这并不是故事的结局 经常或总是不成功的接受将导致上下文切换: 我的测试表明,如果不接受互斥,性能会损失5-10% 更新:“accept mutex”不仅仅是围绕accept锁定的mutext。 它是用于序列化工作进程之间服务器
那么接受连接需要互斥吗?为什么?想象一些进程在一个端口上侦听,然后在epoll中等待。 如果没有接受互斥,所有进程都将唤醒,但只有一个进程能够接受连接。另一些进程则毫无成效。 这是众所周知的 但这并不是故事的结局 经常或总是不成功的接受将导致上下文切换: 我的测试表明,如果不接受互斥,性能会损失5-10% 更新:“accept mutex”不仅仅是围绕accept锁定的mutext。 它是用于序列化工作进程之间服务器端口侦听的技术的名称。
一瞬间只有一个工作进程正在侦听给定的端口。自nginx主线版本1.11.3(2016-07-26发布)起。这部分是因为新的
epolleexclusive
标志提供了accept\u mutex
的好处,而不需要额外的开销。检查
- 接受序列化-多个套接字
- 接受序列化-单套接字
读完所有这些之后,我想Nginx在这方面与Apache非常相似。是的。它使用互斥来序列化新连接。您可以在此处找到一些信息:。但是,我想知道更多。仅供参考:
accept_mutex
现在默认为off
,因为Nginx 1.11.3()@chunama在我的回答中查看了文档。如果accept mutex on更有效,为什么会有off选项?什么时候有用?据我所知,accept mutex和其他模块/配置很少出现问题。有时关闭accept_mutex可能会有所帮助。关闭accept_mutex如果QP数>>10k,则代码>可以将延迟减少数十毫秒