2.1 KiB
2.1 KiB
进程结构
- 单进程结构
- 多进程结构(默认配置-- 更适合工作环境):多线程情况下,一个线程(请求)引起的错误会影响整个进程,保证高可用性(一个请求失败后,不影响其他请求)
- woker 进程
- cache 进程
- master 进程
- work 进程
- Cache Manager
- Cache Loader Master 进程用来管理work进程, work进程用来处理实际的请求,Cache Loader 用来加载缓存,Cache Manager 用来管理缓存 work进程需要使用cache进程 在 配置work 进程数时,需要把work进程数配置到和CPU核心数一样,还要为每个work进程绑定核心, 提高work进程的处理的能力和稳定性。
进程管理 -- 信号
Master 进程
- 监控 Worker 进程
- CHLD -- worker 进程结束的时候会向master 发送
CHLD信号,用来监听worker进程,在必要的时候拉起worker进程
- CHLD -- worker 进程结束的时候会向master 发送
- 管理 Worker 进程
- 接收信号
- TERM, INT -- 理解停止
- QUIT -- 不影响用户的情况下,停止
- HUP -- 重载配置文件
- USR1 -- 重新打开日志文件, 做日志文件的切割
- USR2 --
- WINCH
USR2 和 WINCH 只能通过进程号 直接向master进程发送,其他的可以使用nginx的命令行实现
Worker 进程 -- 通常不给worker进程发送信号
- 接收信号
- 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进程优雅的结束
- 设置定时器 -- worker_shutdown_timeout
- 关闭监听句柄 -- 不再处理新的连接
- 关闭空闲连接 -- 从线程池中处理
- 在循环中等待全部连接关闭 (或者超时,被强制关闭)
- 退出进程