目标
理解nginx高效原理
高效原因分析
- 多进程单线程模型,充分利用硬件资源,单线程减少上下文切换
- 非阻塞式io模型,减少上下文切换,减少阻塞io的资源利用率问题,实现单线程处理大量tcp连接(redis也采用类似架构)
一. 多进程单线程模型
官网架构
。NGINX有一个主进程(master process)(执行特权操作,如读取配置、绑定端口)和一系列工作进程(worker process)和辅助进程(helper process)。
nginx采用可预见式的进程模型,根据硬件资源开启工作进程
-
主进程执行特权操作,如读取配置和绑定端口,还负责创建子进程(下面的三种类型)。
-
缓存加载进程(cache loader process)在启动时运行,把基于磁盘的缓存(disk-based cache)加载到内存中,然后退出。对它的调度很谨慎,所以其资源需求很低。
-
缓存管理进程(cache manager process)周期性运行,并削减磁盘缓存(prunes entries from the disk caches),以使其保持在配置范围内。
-
工作进程(worker processes)才是执行所有实际任务的进程:处理网络连接、读取和写入内容到磁盘,与上游服务器通信等。默认配置
: worker_processes auto
,一个内核一个工作进程
二.非阻塞式io模型
官网
三 更新配置升级方式
image.png
更新NGINX的配置,是一个非常简单的、轻量级的、可靠的操作。运行nginx –s reload命令即可,该命令会检查磁盘上的配置,并给主进程发送一个SIGHUP信号。
当主进程接收到SIGHUP信号后,会做两件事:
1. 重新加载配置,fork一套新的工作进程。这些新的工作进程会立即开始接受连接和处理流量(traffic)(使用新的配置)。
2. 发出信号,通知旧的工作进程安静地退出。这些旧进程不会再接受新的连接了。只要它们处理的HTTP请求结束了,它们就会干净地关闭连接。一旦所有的连接都被关闭,工作进程也就退出了。
原文链接,本文为整理资料:https://www.cnblogs.com/chenjfblog/p/8715580.html
网友评论