nginx惊群问题

nginx惊群问题:#

1. accept导致的惊群,多进程/线程accept监听同一个socket#

linux2.6WQ_FLAG_EXCLUSIVE解决

2. epoll导致的惊群#

nginx使用accept_mutex解决(兼顾负载均衡),只有竞争到了accept_mutex的子进程能够将socket加入epoll中(未获得锁的则移除socket),所有进程 epoll_wait,只有持锁进程监听 accept fd 并能触发事件并执行 accept,处理完当前轮事件后释放锁

3. accept_mutex使用了锁,有开销#

linux3.9->SO_REUSEPORT,每个进程都可绑定同一端口,linux内核做负载均衡,可以不用accept_mutex提升性能

accept_mutex = 有负载均衡作用,惊群问题解决,有一定开销,不适合请求量大的服务器

linux 2.6 ->WQ_FLAG_EXCLUSIVE(解决accept惊群问题) + linux 4.5->EPOLLEXCLUSIVE(解决epoll惊群问题) + linux3.9->SO_REUSEPORT(允许多个socket绑定同一端口,nginx每个进程都可处理请求,同时内核完成负载均衡) = accept_mutex off