### 进程结构 - 单进程结构 - 多进程结构(默认配置-- 更适合工作环境):多线程情况下,一个线程(请求)引起的错误会影响整个进程,保证高可用性(一个请求失败后,不影响其他请求) - 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 事件间的关系