Nginx惊群问题
2024-08-21 02:43:54
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 (进程共享锁) {
释放进程共享锁;
}
//处理数据接收,发送请求队列
//...
}
最新文章
- OpenCASCADE Job - dimue
- CAS单点登录和spring securtiy集成
- 转载 ----HTML5 ---js实现json方式提交数据到服务端
- 转【实战体验几种MySQLCluster方案】
- hdu 1008 Elevator
- css 强制换行
- (转载) mysql中,option是保留字段么?
- 设计模式----代理模式(Proxy)
- linux if 判断字符串是否相等
- Python基础第三天
- SPOJDIVCNT2: Counting Divisors(莫比乌斯反演)
- node 上传文件 路径 重命名等问题
- Spring aop 小例子demo
- Spring框架 jar包下载
- if判断与比较操作符gt、lt、eq等的使用
- Ext.isIterable
- 设计模式系列之装饰模式(Decorator Pattern)
- Hbase API 简单封装
- LightGBM大战XGBoost,谁将夺得桂冠?
- 阿里云申请ssl证书