登录
|
注册
|
QQ账号登录
|
常见问题
联系我们:
我要上传
首页
浏览
幼儿/小学教育
中学教育
高等教育
研究生考试
外语学习
资格/认证考试
论文
IT计算机
经济/贸易/财会
管理/人力资源
建筑/环境
汽车/机械/制造
研究报告
办公文档
生活休闲
金融/股票/期货
法律/法学
通信/电子
医学/心理学
行业资料
文学/艺术/军事/历史
我的淘豆
我要上传
帮助中心
复制
下载此文档
深入浅出Linux惊群:现象、原因和解决方案.docx
文档分类:
IT计算机
|
页数:约19页
举报非法文档有奖
分享到:
1
/
19
下载此文档
搜索
下载此文档
关闭预览
下载提示
1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
2.下载该文档所得收入归上传者、原创者。
3.下载的文档,不会出现我们的网址水印。
同意并开始全文预览
(约 1-6 秒)
下载文档到电脑,查找使用更方便
下 载
还剩?页未读,
继续阅读
分享到:
1
/
19
下载此文档
文档列表
文档介绍
深入浅出Linux惊群:现象、原因和解决方案.docx
深入浅出Linux惊群
现象、原因和解决方案
作者:morganhuang,腾讯 IEG 后台工程师
"惊群"简单地来讲,就lags, void *key)
{
wait_queue_t *curr, *next;
list_for_each_entry_safe(curr, next, &q->task_list, task_list) {
unsigned flags = curr->flags;
if (curr->func(curr, mode, wake_flags, key) &&
(flags & WQ_FLAG_EXCLUSIVE) && !--nr_exclusive)
break;
}
}
这样,在 linux 以后的内核,用户进程 task 对 listen socket 进行 accept 操作,如果这个时候如果没有新的 connect 请求过来,用户进程 task 会阻塞睡眠在 listent fd 的睡眠队列上。这个时候,用户进程 Task 会被设置 WQ_FLAG_EXCLUSIVE 标志位,并加入到 listen socket 的睡眠队列尾部(这里要确保所有不带 WQ_FLAG_EXCLUSIVE 标志位的 non-exclusive waiters 排在带 WQ_FLAG_EXCLUSIVE 标志位的 exclusive waiters 前面)。根据前面的唤醒逻辑,一个新的 connect 到来,内核只会唤醒一个用户进程 task 就会退出唤醒过程,从而不存在了"惊群"现象。
2. select/poll/Epoll "惊群"现象
尽管 accept 系统调用已经不再存在"惊群"现象,但是我们的"惊群"场景还没结束。通常一个 server 有很多其他网络 IO 事件要处理,我们并不希望 server 阻塞在 accept 调用上,为提高服务器的并发处理能力,我们一般会使用 select/poll/epoll I/O 多路复用技术,同时为了充分利用多核 CPU,服务器上会起多个进程(线程)同时提供服务。于是,在某一时刻多个进程(线程)阻塞在 select/poll/epoll_wait 系统调用上,当一个请求上来的时候,多个进程都会被 select/poll/epoll_wait 唤醒去 accept,然而只有一个进程(线程 accept 成功,其他进程(线程 accept 失败,然后重新阻塞在 select/poll/epoll_wait 系统调用上。可见,尽管 accept 不存在"惊群",但是我们还是没能摆脱"惊群"的命运。难道真的没办法了么?我只让一个进程去监听 listen socket 的可读事件,这样不就可以避免"惊群"了么?
没错,就是这个思路,我们来看看 Nginx 是怎么避免由于 listen fd 可读造成的 epoll_wait"惊群"。这里简单说下具体流程,不进行具体的源码分析。
Nginx 的 epoll"惊群"避免
Nginx 中有个标志 ngx_use_accept_mutex,当 ngx_use_accept_mutex 为 1 的时候(当 nginx worker 进程数>1 时且配置文件中打开 accept_mutex 时,这个标志置为 1),表示要进行 listen fdt"惊群"避免。
Nginx 的 worker 进程在进行 event 模块的初始化的时候,在 core event 模块的 process_init 函数中(ngx_event_process_init)将 listen fd 加入到 epoll 中并监听其 READ 事件。Nginx 在进行相关初始化完成后,进入事件循环(ngx_process_events_and_timers 函数),在 ngx_process_events_and_timers 中判断,如果 ngx_use_accept_mutex 为 0,那就直接进入 ngx_process_events(ngx_epoll_process_events),在 ngx_epoll_process_events 将调用 epoll_wait 等待相关事件到来或超时,epoll_wait 返回的时候该干嘛就干嘛。这里不讲 ngx_use_accept_mutex 为 0 的流程,下面讲下 ngx_use_accept_mutex 为 1 的流程。
[1] 进
深入浅出Linux惊群:现象、原因和解决方案 来自淘豆网m.daumloan.com转载请标明出处.
猜你喜欢
A经济技术开发区发展战略研究
2页
Al-Si合金对吸铸镁锂合金组织与力学性能的影响..
2页
49.5兆瓦风力发电工程设计及其环境效益建模
2页
20世纪80年代以来对我国教学反思的研究综述
2页
10种重要林业象虫在我国适生区及其经济损失评..
2页
油气的形成与破坏
100页
小学的作文300字范例(3篇)
3页
小年好看的图片内容(2篇)
5页
开展安全教育活动后的个人总结范文(3篇)
4页
想象的作文[经典8篇]
11页
报社员工辞职报告(16篇)
26页
描写景色的作文(锦集4篇)
5页
汽车行业-微笑服务培训教材
37页
水污染与农业生态的关系
15页
2024年仓库管理年度工作总结报告
11页
相关文档
更多>>
非法内容举报中心
文档信息
页数
:
19
收藏数
:
0
收藏
顶次数
:
0
顶
上传人
:
科技星球
文件大小
:
136 KB
时间
:
2022-03-14
相关标签
鱼池水浑浊原因和解决方案
鱼缸水变绿原因和解决方案
鱼缸水浑浊原因和解决方案
鱼缸水发黄原因和解决方案
雅阁七代抖动原因和解决方案
深入浅出数据分析
经常做噩梦的原因和解决方法
冰柜不制冷的原因和解决方法
喘振的原因及解决方法
网站群解决方案
计算机原理
PHP资料
linux/Unix相关
C/C++资料
Java
.NET
windows相关
管理信息系统
软件工程
网络信息安全
网络与通信
图形图像
行业软件
人工智能
计算机辅助设计
多媒体
软件测试
计算机硬件与维护
网站策划/UE
网页设计/UI
网吧管理
电子支付
搜索引擎优化
服务器
电子商务
Visual Basic
数据挖掘与模式识别
数据库
Web服务
网络资源
Delphi/Perl
Python
CSS/Script
Flash/Flex
手机开发
UML理论/建模
并行计算/云计算
嵌入式开发
计算机应用/办公自动化
数据结构与算法
SEO
最近更新
作业芳香烃作业有机化学课后习题省公开课一..
2025年我的弟弟优秀(精选18篇)
2025年我的小黄鸭四年级作文(精选23篇)
国外生活满意度研究成果及其意义价值
国Ⅳ柴油机燃烧系统性能提升的三维模拟研究..
2025年我的好朋友“卢铭”(精选10篇)
2025年我的四季交响曲作文(共26篇)
四川成渝集团桥梁伸缩装置系统化养护理论应..
2025年我的军训时光记叙文(共5篇)
2025年我的偶像五年级450字作文(精选23篇)..
2025年我的乐园优秀小学作文400字(共25篇)..
2025年我的世界初二作文(精选12篇)
2025年我生命中的金子作文(共18篇)
2025年我爱那美丽的书页作文500字(集锦17篇..
含磺酰胺和肟骨架化合物的合成及生物活性评..
含分布式电源的配电网供电能力研究
向大师汲取营养——以德加为例
同源肿瘤细胞膜仿生的纳米材料在胰腺癌治疗..
合肥膨胀土力学特性的电阻率研究
变电运行培训工作存在的问题探讨
2025年我爱你水仙花三年级作文(共14篇)
2025年我最喜欢的季节优秀作文800字(精选1..
2024年长沙电力职业技术学院单招职业技能测..
2022年普通高等学校招生全国统一考试(甲卷)..
《寄宿日记》地表韩漫最强阿姨
[脊梁电视剧]脊梁
(完整版)精忠报国岳飞传攻略
浮梦动漫社
十八英雄归大唐上
女医师教你真正愉悦
在线
客服
微信
客服
意见
反馈
手机
查看
返回
顶部