0


nginx(八十五)nginx的启动流程

一 如何控制nginx

① 基础知识

kill -l信号列表 信号列表

② 控制nginx

场景1: 不'断连',优雅'reload'加载'新'的配置文件  

涉及: 'nginx -s reload'、'kill -HUP $master_pid '、'kill -1 $master_pid'

场景2: 日志'切割'

涉及: 'nginx -s reopen'、'kill -USR1 $master_pid'、'kill -10 $master_pid'

场景3: 动态更新'nginx可执行'文件

核心'涉及': 'USR2'、'12'
​
强调: 不管是'哪种'方式,'本质'还是操作'主进程id'

nginx热更新涉及的信号量

+++++++++++++ "HUP、reload细讲" +++++++++++++

思考1: reload不'生效'场景?    --> 也即'必须restart'  --> 涉及'哪些'指令?

思考2: reload之前的'缓存'是否会失效?

reload流程

细节点:

  [1]、在启动新的worker子进程以后,master进程会向'老的'worker子进程发送'QUIT'信号;

  备注: QUIT信号是'优雅'的关闭子进程

  [2]、nginx保证'平滑'升级,如何做到'不断连'

  备注:所以它一定要'先启动新'的worker子进程,再向'老的worker'子进程发送'QUIT'信号;

1) 现象1:nginx的'worker进程的数量'变多了  --> '暂时'

2) 现象2:reload'不释放',内存'溢出'       --> '原因'和'解决策略'

 原因:

  [1]、'异常'的情况下,比如说一些请求出问题了,客户端'长时间'没有处理

  [2]、就会导致这个请求'长时间占用'在这个worker子进程上面,而这个worker子进程会'一直'存在

  现象: 存在大量的'worker process is shutting down'

  影响: 只会影响'已经存在的连接'而不会影响新的连接

 解决策略: worker_shutdown_timeout 表示最长会'等待多长'时间退出

 工作机制: 

  [1]、master进程在启用'新的worker子进程'以后,它会加一个定时器worker_shutdown_timeout

  [2]、定时器到期了以后,如果'旧worker子进程'还没有退出,就会强制把旧worker子进程给'退出'

nginx: worker process is shutting down 资源不释放

nginx 代理 'websocket 协议'或'tcp层或者udp层'反向代理的时候,无法优雅地关闭'worker'进程

reload的热部署和日志切割

+++++++++ "热更新失败后如何回退" +++++++++

从压测碰到的诡异断连问题聊聊nginx的连接管理

③ nginx命令行参数

二 nginx的启动流程

① 学习目的

目的1: 深入理解'openresty'的master和worker和进程的'初始化'

1)init_by_lua        init_by_lua_block       init_by_lua_file -->'master初始化'

2)init_worker_by_lua init_worker_by_lua_block  init_worker_by_lua_file 

目的2: 掌握'reload|restart|start' 对'master、worker'进程'init初始化'和'缓存的'影响

② nginx启动、退出时的回调方法

1) init_module  --> 一定是'解析完'nginx.conf配置文件,在'master进程中'调用

2) init_process --> init_by_worker_xxx指令,就是'在worker进程'中调用

常见:取'进程id'有'不同'的结果

重点:可以'深入的理解'openresty的'上述'指令
标签: master worker init

本文转载自: https://blog.csdn.net/wzj_110/article/details/131156576
版权归原作者 wzj_110 所有, 如有侵权,请联系我们删除。

“nginx(八十五)nginx的启动流程”的评论:

还没有评论