回答
收藏
分享
举报
想问下 nginx -s reload  加载配置信息的过程,在新配置加载后,旧的配置会被释放吗?
提问于2021-08-25 10:20

浏览 967

文章标签

我想问下 nginx -s reload  加载配置信息的过程,在新配置加载后,旧的配置会被释放吗?如果旧nginx worker 进程还有未关闭的 TCP 链接,nginx master 会用新配置替代旧配置,并释放旧配置的内存吗?我们用 Nginx 遇见了 Nginx master 内存不释放的现象,每次增长都是在 reload 后,并且有些 nginx worker 进程有长连接没有关闭。
已修改于2023-03-17 02:11



写下您的回答
发表回答
全部回答(2)

按点赞数排序

按时间排序

reload过程会创建一个新的ngx_cycle对象,加载配置完成后就把老的old_cycle和内存都删除了,源码可参考ngx_init_cycle。master进程的工作是独立的,与worker进程没有关系。worker进程的工作方式就是不关闭长连接,避免对用户体验造成影响,可以用指令worker_shutdown_timeout设置超时时间。如果master进程内存增长,可以用一些分析工具看看,也许是某些模块的原因。

赞同

0

回复举报

回答于2021-08-30 11:12



回复罗剑锋
回复

reload的过程的是这样的:
1. 启动worker_process个新nginx worker进程,这些进程使用新的配置

2. 旧nginx的worker 进入shutting down模式,不再接受新的请求(此时worker实际上翻倍了)

3. 旧worker处理完后会自动关闭

可以设置worker_shutdown_timeout来给旧worker一个超时来强制中断TCP连接,关闭旧worker

赞同

0

回复举报

回答于2021-08-25 11:04



回复friparia
回复
提问者
NGINX官方账号
这家伙很懒还未留下介绍~
239
文章
21
问答
198
粉丝
相关问答