为什么'accept_mutex'''在Nginx中默认为'?

时间:2013-03-26 11:46:35

标签: nginx mutex

我发现'accept_mutex'在Nginx中默认为'on',如下所示:

  

http://wiki.nginx.org/EventsModule

接受连接是否需要互斥?为什么呢?

3 个答案:

答案 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)

检查

  • 接受序列化-多个套接字

  • 接受序列化-单插槽

本Apache文档的

部分。 https://httpd.apache.org/docs/2.4/misc/perf-tuning.html。 (与我发布的其余2个文档相比,此文档最重要)

这很有启发性,我也阅读了

http://nginx.org/en/docs/ngx_core_module.html#accept_mutexhttps://www.nginx.com/blog/performance-tuning-tips-tricks/的说明(带有 accept_mutex 的搜索页)。

阅读所有这些内容之后,我想Nginx在这方面与Apache非常相似。