一 如何控制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启动、退出时的回调方法文章来源:https://www.toymoban.com/news/detail-724864.html
文章来源地址https://www.toymoban.com/news/detail-724864.html
1) init_module --> 一定是'解析完'nginx.conf配置文件,在'master进程中'调用
2) init_process --> init_by_worker_xxx指令,就是'在worker进程'中调用
常见:取'进程id'有'不同'的结果
重点:可以'深入的理解'openresty的'上述'指令
到了这里,关于nginx(八十五)nginx的启动流程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!