答案 0 :(得分:4)
截至nginx主线版本1.11.3(2016-07-26发布),accept_mutex
now defaults to off
。这部分是因为新的EPOLLEXCLUSIVE
标志提供了accept_mutex
的好处而没有额外的开销。
答案 1 :(得分:3)
想象一下某些进程在一个端口上侦听并在epoll中等待。 如果没有接受互斥锁,所有进程都将被唤醒,但只有一个进程可以接受连接。其他流程的结果是非生产性的。 众所周知http://en.wikipedia.org/wiki/Thundering_herd_problem
但这不是故事的结局。
通常或总是不成功的接受会导致上下文切换: http://en.wikipedia.org/wiki/Lock_convoy
我的测试表明,如果没有接受互斥锁,性能会下降5-10%。
更新:“接受互斥”不仅仅是互斥锁定在接受。 它是用于序列化工作者之间的服务器端口侦听的技术名称。 只有一个工人在一瞬间听取了给定的端口。
答案 2 :(得分:0)
检查
接受序列化-多个套接字
接受序列化-单插槽
部分。 https://httpd.apache.org/docs/2.4/misc/perf-tuning.html。 (与我发布的其余2个文档相比,此文档最重要)
这很有启发性,我也阅读了
http://nginx.org/en/docs/ngx_core_module.html#accept_mutex和https://www.nginx.com/blog/performance-tuning-tips-tricks/的说明(带有 accept_mutex 的搜索页)。
阅读所有这些内容之后,我想Nginx在这方面与Apache非常相似。