美文网首页
Nginx解决子进程“惊群”问题

Nginx解决子进程“惊群”问题

作者: 吕艳凯 | 来源:发表于2019-11-28 15:30 被阅读0次

       只有打开了accept_mutex锁,才可以解决“惊群”问题。何谓“惊群”?就像上面说过的那样,master进程开始监听Web端口,fork出多个worker子进程,这些子进程开始同时监听同一个Web端口。一般情况下,有多少CPU核心,就会配置多少个worker子进程,这样所有的worker子进程都在承担着Web服务器的角色。在这种情况下,就可以利用每一个CPU核心可以并发工作的特性,充分发挥多核机器的“威力”。但下面假定这样一个场景:没有用户连入服务器,某一时刻恰好所有的worker子进程都休眠且等待新连接的系统调用(如epoll_wait),这时有一个用户向服务器发起了连接,内核在收到TCP的SYN包时,会激活所有的休眠worker子进程,当然,此时只有最先开始执行accept的子进程可以成功建立新连接,而其他worker子进程都会accept失败。这些accept失败的子进程被内核唤醒是不必要的,它们被唤醒后的执行很可能也是多余的,那么这一时刻它们占用了本不需要占用的系统资源,引发了不必要的进程上下文切换,增加了系统开销。

       也许很多操作系统的最新版本的内核已经在事件驱动机制中解决了“惊群”问题,但Nginx作为可移植性极高的Web服务器,还是在自身的应用层面上较好地解决了这一问题。既然“惊群”是多个子进程在同一时刻监听同一个端口引起的,那么Nginx的解决方式也很简单,它规定了同一时刻只能有唯一一个worker子进程监听Web端口,这样就不会发生“惊群”了,此时新连接事件只能唤醒唯一正在监听端口的worker子进程。

相关文章

  • Nginx解决子进程“惊群”问题

    只有打开了accept_mutex锁,才可以解决“惊群”问题。何谓“惊群”?就像上面说过的那样,master...

  • Epoll之惊群

    惊群可以参考:“惊群”,看看nginx是怎么解决它的 1. 什么是惊群: 多线程/多进程(linux下线程进程也没...

  • nginx如何解决惊群效应

    本文主要内容包括惊群效应简介、nginx如何解决惊群和一个仿照nginx避免惊群效应的简单例子 惊群效应 惊群简单...

  • Nginx 多进程架构和惊群问题

    Nginx 多进程架构是:一个master进程和多个worker 进程。一个worker 通过非阻塞式论询,可维护...

  • 惊群效应中epoll_create一定要在fork之后

    背景 多进程单线程epoll程序,惊群问题是绕不开的,即使内核替你解决了accept的惊群问题,epoll的还是需...

  • 关于accept mutex获取的方式

    问题背景 在多进程accept的时候,为了避免惊群效应浪费资源,nginx加了一个accept mutex,但是获...

  • 探索惊群 ①

    惊群比较抽象,类似于抢红包 ?。它多出现在高性能的多进程/多线程服务中,例如:nginx。 探索惊群 系列文章将深...

  • Nginx 加载静态文件失败: [error] 7320#0:

    初步分析,应该是权限问题 使用如下命令查看nginx进程 发现Nginx进程的用户是nginx,修改/etc/ng...

  • Nginx初学相关问题

    nginx 重启权限问题 解决: nginx 文件权限写入问题 解决: nginx vagrant配置文件位置

  • ubuntu 安装 nginx

    安装nginx 启动nginx 其他命令3.1 查看nginx进程 3.2 根据进程ID关闭nginx进程 3.3...

网友评论

      本文标题:Nginx解决子进程“惊群”问题

      本文链接:https://www.haomeiwen.com/subject/abrmwctx.html