Nginx惊群问题

“惊群”概念

所谓惊群,可以用一个简单的比喻来说明:
一群等待食物的鸽子,当饲养员扔下一粒谷物时,所有鸽子都会去争抢,但只有少数的鸽子能够抢到食物,
大部分鸽子都是落空的,只能等待饲养员下一次的喂食。
对于Nginx Web Server,就是多个进程都在等待
接受TCP连接请求,一旦TCP连接请求到来,只有一个或者少部分(多个TCP连接请求)进程能够获取连接成
功,而大部分进程在被操作系统唤醒后,获取连接失败,只能再次进入等待。

“惊群”处理

下面采用伪代码描述Nginx在Linux系统下对于“惊群”问题的处理

while (true) {
if (multi-processes) {
/*
* 尝试获取进程共享锁,不管是否成功,都立即返回。
* 如果获取成功,则通过epoll_ctl系统调用把连接等待fd添加到当前进程的epoll监听列表中;
* 如果获取失败,则通过epoll_ctl系统调用把连接等待fd从当前进程的epoll监听列表中移除。
*/
if (trylock(进程共享锁)) {
falg |= 接受TCP连接请求;
} //调整epoll超时等待时间
//...
} /*
* epoll系统调用:
* 1.获取TCP连接请求fd,加入TCP连接请求队列;
* 2.获取TCP数据接收,发送请求fd,加入数据处理队列。
*/
process_epoll_event(); if (新的TCP连接请求) {
对TCP连接等待fd多次执行接受TCP连接请求处理(accept or accept4);
} if (进程共享锁) {
释放进程共享锁;
} //处理数据接收,发送请求队列
//...
}

Nginx惊群问题的更多相关文章

  1. Nginx惊群处理

    惊群:是指在多线程/多进程中,当有一个客户端发生链接请求时,多线程/多进程都被唤醒,然后只仅仅有一个进程/线程处理成功,其他进程/线程还是回到睡眠状态,这种现象就是惊群. 惊群是经常发生现在serve ...

  2. NGINX怎样处理惊群的

    写在前面 写NGINX系列的随笔,一来总结学到的东西,二来记录下疑惑的地方,在接下来的学习过程中去解决疑惑. 也希望同样对NGINX感兴趣的朋友能够解答我的疑惑,或者共同探讨研究. 整个NGINX系列 ...

  3. “惊群”,看看nginx是怎么解决它的

    在说nginx前,先来看看什么是“惊群”?简单说来,多线程/多进程(linux下线程进程也没多大区别)等待同一个socket事件,当这个事件发生时,这些线程/进程被同时唤醒,就是惊群.可以想见,效率很 ...

  4. Nginx学习之一-惊群现象

    惊群问题(thundering herd)的产生 在建立连接的时候,Nginx处于充分发挥多核CPU架构性能的考虑,使用了多个worker子进程监听相同端口的设计,这样多个子进程在accept建立新连 ...

  5. 【转载】“惊群”,看看nginx是怎么解决它的

    原文:http://blog.csdn.net/russell_tao/article/details/7204260 在说nginx前,先来看看什么是“惊群”?简单说来,多线程/多进程(linux下 ...

  6. Nginx中的惊群现象解决方法

    *什么是惊群现象?Nginx中用了什么方法来避免这种问题的发生?本篇就解决这两个问题...→_→* 惊群现象的定义与危害 在Nginx中,每一个worker进程都是由master进程fork出来的.m ...

  7. 【Nginx】惊群问题

    转自:江南烟雨 惊群问题的产生 在建立连接的时候,Nginx处于充分发挥多核CPU架构性能的考虑,使用了多个worker子进程监听相同端口的设计,这样多个子进程在accept建立新连接时会有争抢,这会 ...

  8. Nginx模型 & 惊群问题

    这篇写的不错 http://www.cnblogs.com/linguoguo/p/5511293.html Nginx为啥性能高-多进程异步IO模型 1. 对于每个worker进程来说,独立的进程, ...

  9. nginx&http 第三章 惊群

    惊群:概念就不解释了. 直接说正题:惊群问题一般出现在那些web服务器上,Linux系统有个经典的accept惊群问题,这个问题现在已经在内核曾经得以解决,具体来讲就是当有新的连接进入到accept队 ...

随机推荐

  1. 深入浅出的Java网络通信

    已经发表个人公众号 代码展示 package two; import java.io.BufferedReader; import java.io.InputStreamReader; import ...

  2. 算法:贪心、回溯(su)、分治、动态规划,思想简要

    贪心算法: 只做出当前看来最好的选择,而不从整体考虑最优,他所作出的是局部最优解.使用该算法的前提是必须具备无后效性,即某个状态以前的选择不会影响以后的状态的选择,只与当前状态有关. 回溯算法: 本质 ...

  3. 一个100%Go语言的Web-Term-SSH 堡垒机项目

    SSH-Fortress 1. What does it do? Make your cluster servers be more safe by expose your SSH connectio ...

  4. EXCEL复制可见单元格

    Excel筛选后,复制筛选后的单元格 1, 首先还是复制这一部分内容. 2, CTRL+G打开 "定位"窗口. 3, 在 "定位"窗口中选择"定位条件 ...

  5. Selenium对浏览器支持的版本【2019/10/25更新】

    最新的selenium与几种常用浏览器的版本兼容情况:(以下驱动,点击直接跳转官方下载地址) 尽量选择最新版本-1的浏览器,比如最新的是60,那就使用59.(建议Chrome更新至72+版本.Fire ...

  6. 下载根目录下的pdf文件, 浏览器下载

    public void outPut(HttpServletRequest request, HttpServletResponse response, Integer type) { ClassPa ...

  7. NIO Channel SocketChannel ServerSocketChannel

    ServerSocketChannel: ServerSocketChannel是一个基于通道的socket监听器.它同我们所熟悉的java.net.ServerSocket执行相同的基本任务,不过它 ...

  8. pxe问题

    可能镜像路径问题 https://blog.csdn.net/geek_tank/article/details/69479196 一.vmlinuz vmlinuz是可引导的.压缩的内核.“vm”代 ...

  9. Git初始配置【一】

    Git客户端的工作 安装完成后,还需要最后一步设置,在命令行输入 $ git config --global user.name "Your Name" $ git config ...

  10. java使用ssh连接Linux并执行命令

     方式1:通过设置账号密码和链接地址 maven pom.xml配置: <dependency>         <groupId>com.jcraft</groupId ...