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

浏览 3.8k

文章标签

我想问下 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官方账号
这家伙很懒还未留下介绍~
335
文章
21
问答
201
粉丝
相关问答

你可以用一台nginx做负载均衡,然后后面的几台nginx去做反向代理,这种不就相当于nginx代替了F5的角色。这种类似于F5的主备机,只不过没有那么强

点赞 0
浏览 4k

这个参数是开启redis的集群功能,发给Redis 服务器的,但连接NGINX请求就被代理了,应该是发不过去

点赞 0
浏览 3.9k

可以试试我的开源项目,在 nginx-rtmp-module 的基础上开发的,除了兼容 nginx-rtmp-module 的所有功能,并添加了 http-flv,gop 缓存,json 格式的 stat 数据等功能,还修复了 nginx-rtmp-module 本身的很多缺陷。

GitHub:https://github.com/winshining/nginx-http-flv-module

本网站:https://www.nginx.org.cn/plug/detail/227

点赞 0
浏览 4.4k