7

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

http://wiki.nginx.org/EventsModule

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

4

3 回答 3

6

从 nginx 主线版本 1.11.3(2016-07-26 发布)开始,accept_mutex现在默认为off. 这部分是因为新标志提供了没有额外开销EPOLLEXCLUSIVE的好处。accept_mutex

于 2016-09-20T01:48:52.657 回答
4

想象一些进程在一个端口上监听并在 epoll 中等待。如果没有接受互斥锁,所有进程都会唤醒,但只有一个能够接受连接。其他进程唤醒了非生产性。这是众所周知的http://en.wikipedia.org/wiki/Thundering_herd_problem

但这不是故事的结局。

通常或总是不成功的接受会导致上下文切换: http ://en.wikipedia.org/wiki/Lock_convoy

我的测试显示,如果没有接受互斥锁,性能会损失 5-10%。

更新:“接受互斥锁”不仅仅是围绕接受锁定的互斥锁。它是用于在工作人员之间序列化侦听服务器端口的技术的名称。某一时刻只有一名工作人员正在监听给定的端口。

于 2013-03-27T19:20:39.773 回答
1

检查

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

  • 接受序列化 - 单套接字

本 Apache 文档的部分内容。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 非常相似。

于 2020-08-24T13:39:43.243 回答