66 lines
2.1 KiB
Markdown
66 lines
2.1 KiB
Markdown
|
||
|
||
### 进程结构
|
||
|
||
- 单进程结构
|
||
- 多进程结构(默认配置-- 更适合工作环境):多线程情况下,一个线程(请求)引起的错误会影响整个进程,保证高可用性(一个请求失败后,不影响其他请求)
|
||
- woker 进程
|
||
- cache 进程
|
||
> 1. master 进程
|
||
> 2. work 进程
|
||
> 3. Cache Manager
|
||
> 4. Cache Loader
|
||
> Master 进程用来管理work进程, work进程用来处理实际的请求,Cache Loader 用来加载缓存,Cache Manager 用来管理缓存
|
||
> work进程需要使用cache进程
|
||
> 在 配置work 进程数时,需要把work进程数配置到和CPU核心数一样,还要为每个work进程绑定核心, 提高work进程的处理的能力和稳定性。
|
||
|
||
### 进程管理 -- 信号
|
||
#### Master 进程
|
||
1. 监控 Worker 进程
|
||
- CHLD -- worker 进程结束的时候会向master 发送 `CHLD` 信号,用来监听worker进程,在必要的时候拉起worker进程
|
||
2. 管理 Worker 进程
|
||
3. 接收信号
|
||
- TERM, INT -- 理解停止
|
||
- QUIT -- 不影响用户的情况下,停止
|
||
- HUP -- 重载配置文件
|
||
- USR1 -- 重新打开日志文件, 做日志文件的切割
|
||
- USR2 --
|
||
- WINCH
|
||
> USR2 和 WINCH 只能通过进程号 直接向master进程发送,其他的可以使用nginx的命令行实现
|
||
|
||
#### Worker 进程 -- 通常不给worker进程发送信号
|
||
1. 接收信号
|
||
- TREM, INT
|
||
- QUIT
|
||
- USR1
|
||
- WINCH
|
||
|
||
#### Nginx 命令行
|
||
- reload: HUP
|
||
- reopen: USR1
|
||
- stop: TERM
|
||
- quit: QUIT
|
||
|
||
|
||
### reload 流程
|
||
- 向master 发送 HUP 信号
|
||
- master 检查配置文件语法正确性
|
||
- master 打开新的监听端口
|
||
- master 用 新的配置文件 启动新的worker进程
|
||
- master 向老的worker子进程发送发动QUIT信号
|
||
- 老的worker进程关闭监听句柄,处理完当前连接后结束进程(超时会被强制退出, 时间是由master进程决定的)
|
||
|
||
|
||
### 热升级流程
|
||
|
||
|
||
### worker进程优雅的结束
|
||
1. 设置定时器 -- worker_shutdown_timeout
|
||
2. 关闭监听句柄 -- 不再处理新的连接
|
||
4. 关闭空闲连接 -- 从线程池中处理
|
||
5. 在循环中等待全部连接关闭 (或者超时,被强制关闭)
|
||
6. 退出进程
|
||
|
||
### 网络收发 与 Nginx 事件间的关系
|
||
|