nginx重载流程nginx请求处理流程nginx单进程和多进程

nginx重载流程

首先nginx会向master进程发送HUP信号[reload命令]
master进程校验配置语法是否正确
master进程打开新的监听端口
master进程用心配置启动新的worker子进程
master进程向老的worker子进程发送QUIT信号
老worker进程关闭监听,处理完当前连接后结束进程

------------------------------------------------
从上方的流程可以看出,我们配置了nginx之后 不一定非要进行nginx -t 检查语法的操作
因为nginx每次重载之前是一定要做语法检查的

nginx请求处理流程

为什么worker进程的数量要与cpu的核数相匹配,为什么nginx会采用work master这样的架构模型

在异步处理流程中,需要使用不同的状态机来处理事件.
重点:
在内存不足以缓存所有的请求文件和信息的时候,nginx的AIO sendfile 调用会退化为阻塞的磁盘调用

Nginx 单进程和多进程

在生产环境中一般都会使用多进程模式,单进程不足以在生产中使用.
nginx采用的是多进程结构,而不是多线程结构.原因就是nginx需要保证它的高可用性与高可靠性

work进程和cache进程: 当nginx使用的多线程的时候,因为线程之间共享的同一个地址空间的. 当某一个第三方模块引发的一个地址空间的错误时,在地址越界时会导致整个nginx进程全部挂掉. 而当采用多进程的时候往往就不会出现这些问题.

cache manager是用于给后端做缓存使用的.
cacheloader做缓存管理的
进程之间的通讯都是通过共享内存来进行的

为什么work进程要有很多呢?
nginx希望一个nginx进程从头到尾占用一颗CPU所以在我们配置nginx时应当将CPU与核数进行绑定,以便于更好的使用每颗cpu核上的cpu缓存来减少缓存失效的命中率

nginx热升级流程:

优雅的关闭work进程流程:

epoll模型

内存池分配

request_pool_size size;
默认配置: 
request_pool_size 4k;

#注意 如果URL很长的时候可以考虑将这里改大一些,如果url很短,那么这里可以改的更小.这样能够优化内存使用率.

共享内存

在nginx中有一些官方模块使用了共享内存:
这些模块有跨worker进程通讯,且使用了共享内存

Ngx_http_lua_api
Ngx_stream_limit_conn_mudule
Ngx_http_limit_conn_module
Ngx_stream_limit_req_module

http cache 模块:
	Ngx_http_file_cache
	Ngx_http_proxy_module
	Ngx_http_scgi_module
	Ngx_http_uwcgi_module
	Ngx_http_fastcgi_module

ssl 模块:
    Ngx_http_ssl_module
    Ngx_mail_ssl_module
    Ngx_stream_ssl_module
    
单链表:
	Ngx_http_upstream_zone_module
	Ngx_stream_upstream_zone_module	                					

猜你喜欢

转载自www.cnblogs.com/superlinux/p/12789134.html