nginx基本原理
进程模型
当nginx启动之后,会有一个master进程和多个worker进程。默认是一个worker进程。

master进程的作用:接收来自外界信号,向各worker进程发送信号,监控worker进程的运行状态,当worker进程在异常情况下退出后,会自动重新启动新的worker进程。
worker进程作用:处理基本的网络事件。

多个worker进程之间时对等的,他们同等竞争来自客户端的请求,各进程互相之间是独立的。一个请求只可能在一个worker进程中处理,不可能处理其它进程的请求。worker进程的个数是可以设置的,一般我们会设置与机器cpu核数一致,原因与nginx的进程模型以及事件处理模型是分不开的。
当有请求到来,master进程只是通知(发信号)每个worker进程有请求到来,然后worker进程去争抢请求。而不是从master进程获取请求。
设计优点
- 方便热部署(./nginx -s relaod)的实现
当master进程在收到信号后,会重新加载配置,启动新的worker,并向所有老的worker进程发送信号,不再接收新的请求,并且在老进程处理完所有未处理完的请求后,退出。
由于一个master进程和多个worker进程,可以实现不需要重启nginx的情况下,重新加载配置。 - 节省资源和健壮性好
由于每个worker进程是独立的,不需要像线程一样需要加锁,省掉了锁的开销。
并且每个worker之间不会影响,一个进程退出,其它进程还在工作,服务不会终端,并且master进程会启动新的worker进程。当然worker进程的异常退出会导致当前worker上的所有请求失败,不过不会影响所有的请求,所以减低了风险。
事件模型
nginx采用的epoll模型,异步非阻塞,IO多路复用机制。对于nginx来说,把一个完整的连接请求处理都划分成了一个事件。每部分都有相应的模块去处理,一个完整的请求可能由几百个模块去处理。
例如:一个worker一开始注册了一个accpet事件,当一个客户端请求连接时,连接事件变为可读,worker进程执行相应的模块,再注册监听连接事件,等待请求的到来。当有请求到来变为可读时,epoll模型就会通知worker进程执行相应的模块处理。处理完,再注册发送事件,当可以发送事件就绪时,再通知worker进程执行相应的模块。
真正核心的就是事件收集和分发模块,只有核心模块的调度才能让对应的模块占用CPU资源。拿一个http请求来说,首先事件收集分发模块注册感兴趣的监听事件,注册好之后不阻塞直接返回,当有连接来临时,内核会通知(epoll模型会通知进程),CPU就可以处理其它事情了。
为什么说worker进程的个数和机器cpu核数一致最好?
worker是一个单独的进程,里面只有一个主线程,通过异步非阻塞的方式来处理请求,即使千万个请求也可以处理,每一个worker线程可以把cpu的性能发挥到极致。所以worker数和服务器的cpu核数相等最为适宜。设少了会浪费CPU,设多了会导致CPU频繁切换上下文带来损耗。
连接数
- 客户端发送请求,占用了worker的几个连接数?
2个或者4个。
当访问的是静态资源时,worker进程接收请求一个连接,然后将静态资源返回一个连接,总共两个连接。
当访问的时动态资源时,worker进程接收请求一个连接,发送请求动态资源请求给动态资源服务器一个连接,再接收动态资源服务器响应一个连接,然后将动态资源返回一个连接,总共四个连接。 - 当nginx有一个master进程,四个worker进程,每个worker进程支持最大连接数为1024,worker支持最大并发数(请求数)为多少?
最大连接数为:4 * 1024
最大并发数为:4 * 1024 / 2(访问静态资源) 或 4 * 1024 / 4 (反向代理,访问动态资源)
相关文章:
nginx基本原理
进程模型 当nginx启动之后,会有一个master进程和多个worker进程。默认是一个worker进程。 master进程的作用:接收来自外界信号,向各worker进程发送信号,监控worker进程的运行状态,当worker进程在异常情况下退出后&am…...
在 CI/CD Pipeline 中实施持续测试的最佳实践!
随着软件开发周期的不断加快,持续集成(CI)和持续交付/部署(CD)已经成为现代软件开发的重要组成部分。在这一过程中,持续测试的实施对于确保代码质量、提高发布效率至关重要。本文将详细介绍在CI/CD流水线中…...
数据结构 —— B树
数据结构 —— B树 B树B树的插入操作分裂孩子分裂父亲分裂 我们之前学过了各种各样的树,二叉树,搜索二叉树,平衡二叉树,红黑树等等等等,其中平衡二叉树和红黑树都是控制树的高度来控制查找次数。 但是,这都…...
Redis 深度历险:核心原理与应用实践 - 读书笔记
目录 第一章 基础应用篇Zset并发问题 - 分布式锁再谈分布式锁客户端在请求时加锁失败策略redis异步队列位图Hyperloglog布隆过滤器GeoHashscan 命令字典结构rehash扩容大 key 扫描 第二章 原理篇线程IO模型RESP 序列化协议持久化管道事务PubSub内存管理 第三章 集群篇CAP主从同…...
微服务重启优化kafka+EurekaNotificationServerListUpdater
由于遇到服务重启导致的业务中断等异常,所以计划通过kafkaeureka实现服务下线通知,来尽可能规避这类问题。 如果可以升级spring,则可以考虑nacos等更为方便的方案; 程序优化: 1.默认启用的为 PollingServerListUpdater…...
removeIf 方法设计理念及泛型界限限定
ArrayList 中的 removeIf 方法是 Java 8 中引入的集合操作方法之一。它使用了 Predicate 接口作为参数,以便根据指定的条件移除集合中的元素。以下是对 removeIf 方法入参设计的详细解释: Predicate 接口 Predicate 是一个函数式接口,定义了…...
kubernetes集群部署elasticsearch集群,包含无认证和有认证模式
1、背景: 因公司业务需要,需要在测试、生产kubernetes集群中部署elasticsearch集群,因不同环境要求,需要部署不同模式的elasticsearch集群, 1、测试环境因安全性要求不高,是部署一套默认配置; 2…...
Java 随笔记: 集合与泛型
文章目录 1. 集合框架概述2. 集合接口2.1 Collection 接口2.2 List 接口2.3 Set 接口2.4 Map 接口 3. 集合的常用操作3.1 添加元素3.2 删除元素3.3 遍历元素3.4 判断大小3.5 判断是否为空 4. 迭代器4.1 迭代器的作用4.2 迭代器的使用4.3 迭代器与增强 for 循环4.4 迭代器的注意…...
SurrealDB:高效构建实时Web应用的数据库
SurrealDB:数据驱动,实时协同。用SurrealDB简化你的开发流程- 精选真开源,释放新价值。 概览 SurrealDB,一款专为现代Web应用设计的云原生数据库,以其创新的架构和功能,为开发者提供了一个强大的工具。它整…...
SQL Server查询计划阅读及分析
6.4.5. 查询计划阅读及分析 SQL Server中,SQL语句的查询计划可能会包含多个节点,每个节点除了包含和对应一个操作符外,还包含节点及操作符相关的其他信息,其细节与具体的操作符相关。SQL Server查询计划与Oracle执行计划中,虽然每个节点所包含内容的具体称谓…...
SAP Fiori 实战课程(二):新建页面
课程回顾 上一课中,利用Visual studio Code 新建、并运行了一个Demo工程。可以实现对项目的启动,启动后进入一个List清单。 那么本次课程的目前就是在上一节Demo的基础上,从零开始新建一个完整的页面。实现从首页清单,选择行后,鼠标点击,进入下一个页面。 准备工作 在开…...
【Rust光年纪】超越ORM:探索Rust语言多款数据库客户端库的核心功能和使用场景
数据库操作新选择:从异步操作到连接管理,掌握Rust语言数据库客户端库的全貌 前言 在现代软件开发中,与数据库进行交互是一个常见的任务。Rust语言作为一种高性能、内存安全的编程语言,拥有丰富的生态系统来支持各种数据库操作。…...
解决:事件监听器 addEventListener 被多次调用
背景: 给一个元素添加了事件监听,click 会触发 然而在实际场景中,点击一次,事件会被触发两次 阻止冒泡也没有用 解决: 使用API:event.stopImmediatePropagation() stopImmediatePropagation() 方法可防止…...
配置RIPv2的认证
目录 一、配置IP地址、默认网关、启用端口 1. 路由器R1 2. 路由器R2 3. 路由器R3 4. Server1 5. Server2 二、搭建RIPv2网络 1. R1配置RIPv2 2. R2配置RIPv2 3. Server1 ping Server2 4. Server2 ping Server1 三、模拟网络攻击,为R3配置RIPv2 四、在R…...
前端调试技巧:动态高亮渲染区域
效果: 前端界面的渲染过程、次数,会通过高亮变化来显示,通过这种效果排除一些BUG 高亮 打开方式 F12进入后点击ESC,进入rendering,选择前三个即可(如果没有rendering,点击橘色部分勾选上&…...
深克隆与浅克隆的区别与实现
在软件开发中,克隆对象是一个常见需求。克隆的方式主要有两种:深克隆(Deep Clone)和浅克隆(Shallow Clone)。了解它们的区别及其实现方法,对于编写高效、安全的代码非常重要。 深克隆与浅克隆的…...
【学习笔记】无人机系统(UAS)的连接、识别和跟踪(六)-无人机直接C2通信
目录 引言 5.4 直接C2通信 5.4.1 概述 5.4.2 A2X直接C2通信服务的授权策略 5.4.3 USS使用A2X直接C2通信服务的C2授权程序 5.4.4 直接C2通信建立程序 引言 3GPP TS 23.256 技术规范,主要定义了3GPP系统对无人机(UAV)的连接性、身份识别…...
认识和安装R的扩展包,什么是模糊搜索安装,工作目录和空间的区别与设置
R语言以其强大的功能和灵活的扩展性,成为了无数数据分析师和研究者的首选工具。R的丰富功能和海量扩展包直接相关,但如何高效管理这些扩展包,进而充分发挥R的强大潜力?本文将为您揭示这些问题的答案。 一、R的扩展包 R的包(packages)是由R函数、数据和预编译代码组成的一…...
解决STM32开启定时器时立即进入一次中断程序问题
转自 解决STM32开启定时器时立即进入一次中断程序问题_stm32f407定时器初始化自动进入一次-CSDN博客 配置STM32定时器时,定时器中断使能、定时器使能、清除更新中断标志位,三者不同顺序程序执行时有不同效果,具体如下: TIM_Clea…...
Unity UGUI 之EventSystem
本文仅作学习笔记与交流,不作任何商业用途 本文包括但不限于unity官方手册,唐老狮,麦扣教程知识,引用会标记,如有不足还请斧正 1.EventSystem是什么? 有需要请查看手册:Unity - 手册࿱…...
JSON数据高效处理:命令行工具jsoncut的查询、过滤与投影实战
1. 项目概述:一个专为JSON数据“瘦身”的利器在前后端开发、API接口调试、数据迁移或者日志分析的日常工作中,JSON格式的数据几乎无处不在。它结构清晰、易于阅读和解析,是现代数据交换的绝对主力。但随之而来的一个常见痛点就是:…...
数据库测试的盲区:用AI生成边界值,发现隐藏的数据异常
在软件测试领域,数据库层的质量保障常常陷入一种“平静的假象”——核心CRUD操作通过、索引命中率达标、慢查询被优化,一切看似井然有序。然而线上事故统计却揭示了一个残酷的事实:超过七成的数据库相关故障并非源于架构缺陷或性能瓶颈&#…...
Arm A64指令集SIMD与浮点寄存器架构解析
1. A64指令集的SIMD与浮点寄存器架构解析在Armv8-A架构中,A64指令集引入了强大的向量处理能力,通过32个128位宽的V寄存器(V0-V31)实现了高效的SIMD(单指令多数据)和浮点运算支持。这套寄存器文件的设计巧妙…...
5大核心功能揭秘:GTA5线上小助手如何彻底改变你的洛圣都冒险体验
5大核心功能揭秘:GTA5线上小助手如何彻底改变你的洛圣都冒险体验 【免费下载链接】GTA5OnlineTools GTA5线上小助手 项目地址: https://gitcode.com/gh_mirrors/gt/GTA5OnlineTools 你是否厌倦了在GTA5线上模式中花费数小时完成重复任务?是否希望…...
OpenClaw:让 AI 从 “对话” 走向 “实干” 的开源智能体
在人工智能技术快速发展的今天,大语言模型的对话能力已日趋成熟,但 “能说不能做” 的痛点始终制约着 AI 的实际应用价值。2026 年,一款名为 OpenClaw(社区昵称 “小龙虾 AI”)的开源项目迅速走红,它以 “真…...
如何免费获取全球50+图书馆古籍资源:BookGet数字古籍下载完整指南
如何免费获取全球50图书馆古籍资源:BookGet数字古籍下载完整指南 【免费下载链接】bookget bookget 数字古籍图书下载工具。 项目地址: https://gitcode.com/gh_mirrors/bo/bookget 还在为寻找古籍文献而烦恼吗?想要从哈佛、国会图书馆等全球知名…...
HEIF Utility:Windows平台HEIF格式兼容性完整解决方案实战
HEIF Utility:Windows平台HEIF格式兼容性完整解决方案实战 【免费下载链接】HEIF-Utility HEIF Utility - View/Convert Apple HEIF images on Windows. 项目地址: https://gitcode.com/gh_mirrors/he/HEIF-Utility 对于使用iPhone或iPad的Windows用户而言&a…...
告别OrthoFinder限制:用IQtree+Notung搞定跨物种基因家族树(附兰科NB-ARC实战)
突破OrthoFinder局限:基于IQtree与Notung的跨物种基因家族进化分析实战 当你在研究一个特定基因家族的进化历程时,OrthoFinder的默认聚类机制可能会成为一道难以逾越的障碍。想象一下这样的场景:你精心收集了四个兰科物种的NB-ARC结构域序列&…...
玩转Proteus虚拟仪器与图表仿真:用示波器、逻辑分析仪调试数字电路的完整指南
玩转Proteus虚拟仪器与图表仿真:用示波器、逻辑分析仪调试数字电路的完整指南 在数字电路设计领域,仿真验证环节往往决定着项目的成败。传统面包板调试需要反复焊接元器件、连接示波器探头,而一个简单的接线错误就可能导致数小时的排查。Prot…...
FanControl终极指南:3分钟掌握Windows风扇控制神器,告别噪音与高温困扰
FanControl终极指南:3分钟掌握Windows风扇控制神器,告别噪音与高温困扰 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://git…...
