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 (进程共享锁) {
释放进程共享锁;
} //处理数据接收,发送请求队列
//...
}

最新文章

  1. OpenCASCADE Job - dimue
  2. CAS单点登录和spring securtiy集成
  3. 转载 ----HTML5 ---js实现json方式提交数据到服务端
  4. 转【实战体验几种MySQLCluster方案】
  5. hdu 1008 Elevator
  6. css 强制换行
  7. (转载) mysql中,option是保留字段么?
  8. 设计模式----代理模式(Proxy)
  9. linux if 判断字符串是否相等
  10. Python基础第三天
  11. SPOJDIVCNT2: Counting Divisors(莫比乌斯反演)
  12. node 上传文件 路径 重命名等问题
  13. Spring aop 小例子demo
  14. Spring框架 jar包下载
  15. if判断与比较操作符gt、lt、eq等的使用
  16. Ext.isIterable
  17. 设计模式系列之装饰模式(Decorator Pattern)
  18. Hbase API 简单封装
  19. LightGBM大战XGBoost,谁将夺得桂冠?
  20. 阿里云申请ssl证书

热门文章

  1. VSCode 本地如何查看历史页面
  2. 缺陷描述(Description)
  3. 仿站技术——获取和使用某些网站的iconfont图标字体
  4. D3.js的v5版本入门教程(第八章)—— 坐标轴
  5. Linux 文件系统磁盘空间与连接文件
  6. 刷题记录:[De1ctf] shell shell shell
  7. TOMCAT 可以稳定支持的最大并发用户数
  8. Linux_CentOS 内存、cpu、进程、端口、硬盘管理
  9. linux系统上传下载命令rz和sz的教程
  10. explain结果总结