这个模块存在内存泄露
nginx1.8.1 或者 nginx 1.14.2 2个版本测试编译进这个模块以后,nginx进程占用内存一直增加不下降。 去掉这个模块以后业务低峰期nginx内存会自动释放。
@hilbert36 有没有数据贴一下,模块短时间内是不会释放内存的,需要等一段时间
@xiaokai-wang 我们测试连续观察了2台nginx服务器近2周的时间,编译了这个模块1天之内服务器内存会飙到3G多一直增长不释放,即使凌晨半夜没有访问也不会释放。之前服务器内存占用基本恒定在1G左右,在12点和18点2个时间点业务请求下降后内存会自动释放。

这个是服务器的内容监控情况
@hilbert36 有1.14.2 版本启用这个模块的内存占用情况没?
@xiaokai-wang 这个就是1.14.2之前编译了这个模块的监控内存占用情况,1.8.1,1.10.3,1.14.2 之前测试的表现情况都是一样的。
@hilbert36 有没有使用健康检查模块? 可以多跑两天,观察一下内存是否会一直上涨;谢谢!

@xiaokai-wang 没有使用健康检查模块,目前一天之内就会把内存耗光,系统闲时内存不会释放,现在设置了0点自动重启,昨天7点钟就报剩余内存不足 10%了,然后进行了手动重启。
@hilbert36 目前情况怎么样
目前通过每天凌晨自动重启一下释放内存
我们也有一样的情况出现,用 GDB dump 了一下 nginx worker 的内存,发现大量的字符串 fail_timeout ,初步估计是 struct ngx_http_upsync_conf_t 创建了不释放导致的。
@killkill 内存泄漏的问题,你那边最终解决了吗?
@hilbert36 有没有使用健康检查模块? 可以多跑两天,观察一下内存是否会一直上涨;谢谢!
猜测可能是ngx_http_upsync_ctx_t结构体中的几个ngx_array_t导致的内存泄漏 比如在函数ngx_http_upsync_consul_parse_json内每次使用ngx_array_init对upstream_conf重新进行初始化, 但是原先upstream_conf指向的内存池并没有释放
是否应该先ngx_array_destroy(&ctx->upstream_conf)
uscf->peer.data 一直新增,没见释放旧 peer ?