Young's blog Young's blog
首页
Spring
  • 前端文章1

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • HTML
  • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Young

首页
Spring
  • 前端文章1

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • HTML
  • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Nginx基础
  • Nginx配置
  • Nginx proxy_pass 配置转发 / 路径
  • Nginx 配置密码认证
  • Nginx 配置 CPU 亲和性
  • Nginx 配置 UDP/TCP/WebSocket 反向代理
  • Nginx 配置目录文件列表显示功能
  • Nginx 配置 gzip 压缩、缓存功能
  • Nginx 配置端口转发
  • Nginx底层进程机制剖析
  • nginx配置location匹配顺序总结
  • nginx
andanyang
2023-03-28

Nginx底层进程机制剖析

Nginx 启动后,以 daemon 多进程方式在后台运行,包括⼀个 Master 进程和多个 Worker 进程,Master 进程是领导,是⽼⼤,Worker 进程是干活的⼩弟。

image-20230328153434015

  • master 进程

    主要是管理 worker 进程,⽐如:

    • 接收外界信号,向各 worker 进程发送信号(./nginx -s reload)
    • 监控 worker 进程的运行状态,当 worker 进程异常退出后 Master 进程会⾃动重新启动新的 worker 进程等
  • worker 进程

    worker 进程具体处理⽹络请求。多个 worker 进程之间是对等的,他们同等竞争来⾃客户端的请求,各进程互相之间是独⽴的。⼀个请求,只可能在⼀个 worker 进程中处理,⼀个 worker 进程, 不可能处理其它进程的请求。worker 进程的个数是可以设置的,⼀般设置与机器 cpu 核数⼀致。

    Nginx 进程模型示意图如下

    image-20230328153647752

  • 以 ./nginx -s reload 来说明 nginx 信号处理这部分

    1. master 进程对配置文件进行语法检查
    2. 尝试配置(⽐如修改了监听端口,那就尝试分配新的监听端口)
    3. 尝试成功则使⽤新的配置,新建 worker 进程
    4. 新建成功,给旧的 worker 进程发送关闭消息
    5. 旧的 worker 进程收到信号会继续服务,直到把当前进程接收到的请求处理完毕后关闭 所以 reload 之后 worker 进程 pid 是发⽣了变化的

    image-20230328153857580

  • worker 进程处理请求部分的说明

    例如,我们监听 9003 端口,⼀个请求到来时,如果有多个 worker 进程,那么每个 worker 进程都有 可能处理这个链接。

    • master 进程创建之后,会建⽴好需要监听的的 socket,然后从 master 进程再 fork 出多个 worker 进程。所以,所有 worker 进程的监听描述符 listenfd 在新连接到来时都变得可读。
    • nginx 使⽤互斥锁来保证只有⼀个 worker 进程能够处理请求,拿到互斥锁的那个进程注册 listenfd 读事件,在读事件⾥调⽤ accept 接受该连接,然后解析、处理、返回客户端
  • nginx 多进程模型好处

    • 每个 worker 进程都是独⽴的,不需要加锁,节省开销
    • 每个 worker 进程都是独⽴的,互不影响,⼀个异常结束,其他的照样能提供服务
    • 多进程模型为 reload 热部署机制提供了⽀撑
编辑 (opens new window)
上次更新: 2024/04/19, 08:52:45
Nginx 配置端口转发
nginx配置location匹配顺序总结

← Nginx 配置端口转发 nginx配置location匹配顺序总结→

最近更新
01
idea 热部署插件 JRebel 安装及破解,不生效问题解决
04-10
02
spark中代码的执行位置(Driver or Executer)
12-12
03
大数据技术之 SparkStreaming
12-12
更多文章>
Theme by Vdoing | Copyright © 2019-2024 Young | MIT License
浙ICP备20002744号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式