Nginx进程调度问题详解

Nginx采用的是固定数量的多进程模型,由一个主进程(MasterProcess)和数量与主机CPU核数相同的工作进程协同处理各种事件。这篇文章主要介绍了Nginx进程调度问题,需要的朋友可以参考下

Posted in Servers onSeptember 25, 2021

Nginx采用的是固定数量的多进程模型,由一个主进程(MasterProcess)和数量与主机CPU核数相同的工作进程协同处理各种事件。

Nginx采用的是固定数量的多进程模型,由一个主进程(MasterProcess)和数量与主机CPU核数相同的工作进程协同处理各种事件。

主管理进程负责工作进程的配置加载、启停等操作,工作进程负责处理具体请求。进程间的资源都是独立的,每个工作进程处理多个连接,每个连接由一个工作进程全权处理,不需要进行进程切换,也就不会产生由进程切换引起的资源消耗问题。默认配置下,工作进程的数量与主机CPU核数相同,充分利用CPU和进程的亲缘性(affinity)将工作进程与CPU绑定,从而最大限度地发挥多核CPU的处理能力。

Nginx主进程负责监听外部控制信号,通过频道机制将相关信号操作传递给工作进程,多个工作进程间通过共享内存来共享数据和信息。

Nginx进程调度问题详解

Tips:进程亲缘性(affinity),使进程或线程在指定的CPU(核)上运行。

Nginx的工作进程有如下几种调度方式:

  • 无调度模式:所有工作进程都会在连接事件被触发时争相与客户端建立连接,建立连接成功则开始处理客户端请求。无调度模式下所有进程都会争抢资源,但最终只有一个进程可以与客户端建立连接,对于系统而言这将在瞬间产生大量的资源消耗,这就是所谓的惊群现象。
  • 互斥锁模式:每个工作进程都会周期性地争抢互斥锁,一旦某个工作进程抢到互斥锁,就表示其拥有接收HTTP建立连接事件的处理权,并将当前进程的socket监听注入事件引擎(如epoll)中,接收外部的连接事件。其他工作进程只能继续处理已经建立连接的读写事件,并周期性地轮询查看互斥锁的状态,只有互斥锁被释放后工作进程才可以抢占互斥锁,获取HTTP建立连接事件的处理权。当工作进程最大连接数的1/8与该进程可用连接(free_connection)的差大于或等于1时,则放弃本轮争抢互斥锁的机会,不再接收新的连接请求,只处理已建立连接的读写事件。互斥锁模式有效地避免了惊群现象,对于大量HTTP的短连接,该机制有效避免了因工作进程争抢事件处理权而产生的资源消耗。但对于大量启用长连接方式的HTTP连接,互斥锁模式会将压力集中在少数工作进程上,进而因工作进程负载不均而导致QPS下降。
  • 套接字分片:套接字分片是由内核提供的一种分配机制,该机制允许每个工作进程都有一组相同的监听套接字。当有外部连接请求时,由内核决定哪个工作进程的套接字监听可以接收连接。这有效避免了惊群现象的发生,相比互斥锁机制提高了多核系统的性能。该功能需要在配置listen指令时启用reuseport参数。

Tips:Nginx 1.11.3以后的版本中互斥锁模式默认是关闭的。套接字分片模式则因为由Linux内核提供进程的调度机制,所以性能最好。

到此这篇关于Nginx进程调度问题的文章就介绍到这了,更多相关Nginx进程调度内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Servers 相关文章推荐
Apache站点配置SSL强制跳转443
Mar 09 Servers
Nginx tp3.2.3 404问题解决方案
Mar 31 Servers
nginx限制并发连接请求数的方法
Apr 01 Servers
解决xampp安装后Apache无法启动
Mar 21 Servers
Z-Order加速Hudi大规模数据集方案分析
Mar 31 Servers
nginx location 带斜杠【 / 】与不带的区别
Apr 13 Servers
nginx配置之并发频次限制
Apr 18 Servers
Windows Server 2019 安装DHCP服务及相关配置
Apr 28 Servers
Nginx 配置 HTTPS的详细过程
May 30 Servers
腾讯云服务器部署前后分离项目之前端部署
Jun 28 Servers
centos环境下nginx高可用集群的搭建指南
Jul 23 Servers
keepalived + nginx 实现高可用方案
Dec 24 Servers
解决使用了nginx获取IP地址都是127.0.0.1 的问题
Sep 25 #Servers
关于nginx 实现jira反向代理的问题
Windows下用Nginx配置https服务器及反向代理的问题
Sep 25 #Servers
nginx安装以及配置的详细过程记录
Sep 15 #Servers
Nginx缓存设置案例详解
Sep 15 #Servers
图文详解Nginx版本平滑升级方案
Sep 15 #Servers
Nginx配置文件详解以及优化建议指南
Sep 15 #Servers
You might like
解决php中Cannot send session cache limiter 的问题的方法
2007/04/27 PHP
php正则校验用户名介绍
2008/07/19 PHP
php中$_SERVER[PHP_SELF] 和 $_SERVER[SCRIPT_NAME]之间的区别
2009/09/05 PHP
php抓取页面的几种方法详解
2013/06/17 PHP
PHP批量生成静态HTML的简单原理和方法
2014/04/20 PHP
PHP多个图片压缩成ZIP的方法
2020/08/18 PHP
学习YUI.Ext基础第一天
2007/03/10 Javascript
js下写一个事件队列操作函数
2010/07/19 Javascript
web前端开发也需要日志
2010/12/09 Javascript
关于 文本框默认值 的操作js代码
2012/01/12 Javascript
JS判断不能为空实例代码
2013/11/26 Javascript
js实现图片无缝滚动特效
2020/03/19 Javascript
jQuery插件pagination实现无刷新分页
2016/05/21 Javascript
angularjs封装$http为factory的方法
2017/05/18 Javascript
JavaScript函数绑定用法实例分析
2017/11/14 Javascript
JS使用对象的defineProperty进行变量监控操作示例
2019/02/02 Javascript
深入浅析Vue 中 ref 的使用
2019/04/29 Javascript
详解Vue、element-ui、axios实现省市区三级联动
2019/05/07 Javascript
python迭代器与生成器详解
2016/03/10 Python
彻底搞懂python 迭代器和生成器
2020/09/07 Python
Django框架安装及项目创建过程解析
2020/09/14 Python
如何让PyQt5中QWebEngineView与JavaScript交互
2020/10/21 Python
python 录制系统声音的示例
2020/12/21 Python
详解Python 中的 defaultdict 数据类型
2021/02/22 Python
HTML5+lufylegend实现游戏中的卷轴
2016/02/29 HTML / CSS
Canvas 像素处理之改变透明度的实现代码
2019/01/08 HTML / CSS
Html5让容器充满屏幕高度或自适应剩余高度的布局实现
2020/05/14 HTML / CSS
草莓网化妆品澳大利亚站:Strawberrynet AU
2017/12/18 全球购物
REISS美国官网:伦敦最受欢迎的时尚品牌
2019/08/16 全球购物
英国网上自行车商店:Tredz Bikes
2019/10/29 全球购物
文明演讲稿范文
2014/05/12 职场文书
捐助贫困学生倡议书
2014/05/16 职场文书
求职教师自荐书
2014/06/19 职场文书
交通安全温馨提示语
2015/07/14 职场文书
MySQL8.0.18配置多主一从
2021/06/21 MySQL
SpringBoot接入钉钉自定义机器人预警通知
2022/07/15 Java/Android