ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

Nginx----高级

2019-09-21 09:56:09  阅读:228  来源: 互联网

标签:cache work 高级 发送 Nginx master 进程


Nginx请求流程

 

 

 

 

Nginx进程结构

  Nginx有两种进程结构,一种是单进程(可以用于测试),一种是多进程(用于生产,默认)

  Nginx会按需同时运行多个进程:一个主进程(master)和几个工作进程(worker),配置了缓存时还会有缓存加载器进程(cache loader)和缓存管理器进程(cache manager)等。Nginx主要通过“共享内存”的机制实现进程间通信。worker 进程数,一般会设置成机器 cpu 核数。因为更多的worker 数,只会导致进程相互竞争 cpu,从而带来不必要的上下文切换。

  请求的缓存处理还是由work进程来执行的。CM:缓存的管理,CL:缓存的载入。

                    

 

进程结构测试

  1、ps -ef | grep nginx:可以查看到所有的work进程和cache进程
  2、../sbin/nginx -s reload:重新加载配置
  3、ps -ef | grep nginx:可以查看到之前所有的work进程和cache进程全部退出,重新生成新的work进程和cache进程
  4、kill -SIGHUP 9170:向master进程发送hub信号,结果和reload一样
  5、ps -ef | grep nginx:可以查看到之前所有的work进程和cache进程全部退出,重新生成新的work进程和cache进程
  6、kill -SIGTERM 16982:向work进程发送退出信号
  7、ps -ef | grep nginx:16982进程退出,会重新生成一个work进程

Nginx采用多进程而不是多线程,目的?

  Nginx 的进程就是线程,即每个进程里只有一个线程,但这一个线程可以服务多个客户端。

  Nginx需要保证高可用和高可靠性,多线程线程之间共享某一快地址空间,如果某一个第三方某块引发了一个地址空间导致的断错误时,在地址越界出现时,会导致整个Nginx整个进程挂掉。

  nginx采用多进程的方式,既可以避免因某个线程故障导致整个服务不可用的问题,也可以实现配置热加载,不停服升级版本。

Nginx实现高并发原理?

  参考:https://blog.csdn.net/m0_38110132/article/details/75126316

多进程之间通讯

  多进程通讯可以使用共享内存,信号等,Nginx做进程管理通常只使用信号

  Master进程可以监控wrok进程是否像master发送CHLD信号,因为子进程终止的时候回向父进程发送CHLD信号,如果work由于意外发生终止(认为输入命令终止,但是我们一般不这么做,我们通过发送命令给master,让master来终止work进程),此时master进程就会知道。

 

 

reload详解

1、向master进程发送HUP信号(reload命令)
2、master进程校验配置语法是否正确
3、master进程打开新的监听端口(配置文件可能添加了新的端口)
4、master进程用新配置启动新的worker子进程
5、master进程向老worker子进程发送QUIT信号
6、老worker进程关闭监听句柄,处理完当前连接后结束进程

 

 

热升级流程详解

1、将旧Nginx文件换成新Nginx文件(注意备份)
2、向master进程发送USR2信号
3、master进程修改pid文件名,加后缀.oldbin
4、master进程用新Nginx文件启动新master进程
5、向老master进程发送QUIT信号,关闭老master进程
6、回滚:向老master发送HUP,向新master发送QUIT

  

 

 

如果优雅的关闭work进程(缓慢的关闭)

如果当前的work已经在处理请求,立刻关闭连接,就会造成用户接受错误消息

1、设置定时器:worker shutdown timeout
2、关闭监听句柄
3、关闭空闲连接
4、在循环中等待全部连接关闭
5、退出进程

  

 

标签:cache,work,高级,发送,Nginx,master,进程
来源: https://www.cnblogs.com/yanxiaoge/p/11561448.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有