nginx-upsync-module icon indicating copy to clipboard operation
nginx-upsync-module copied to clipboard

这个模块存在内存泄露

Open hilbert36 opened this issue 6 years ago • 13 comments

nginx1.8.1 或者 nginx 1.14.2 2个版本测试编译进这个模块以后,nginx进程占用内存一直增加不下降。 去掉这个模块以后业务低峰期nginx内存会自动释放。

hilbert36 avatar Nov 22 '19 11:11 hilbert36

@hilbert36 有没有数据贴一下,模块短时间内是不会释放内存的,需要等一段时间

xiaokai-wang avatar Nov 23 '19 03:11 xiaokai-wang

@xiaokai-wang 我们测试连续观察了2台nginx服务器近2周的时间,编译了这个模块1天之内服务器内存会飙到3G多一直增长不释放,即使凌晨半夜没有访问也不会释放。之前服务器内存占用基本恒定在1G左右,在12点和18点2个时间点业务请求下降后内存会自动释放。

hilbert36 avatar Nov 23 '19 09:11 hilbert36

upsync

这个是服务器的内容监控情况

hilbert36 avatar Nov 23 '19 09:11 hilbert36

@hilbert36 有1.14.2 版本启用这个模块的内存占用情况没?

xiaokai-wang avatar Nov 25 '19 02:11 xiaokai-wang

1 14 2 @xiaokai-wang 这个就是1.14.2之前编译了这个模块的监控内存占用情况,1.8.1,1.10.3,1.14.2 之前测试的表现情况都是一样的。

hilbert36 avatar Nov 25 '19 04:11 hilbert36

@hilbert36 有没有使用健康检查模块? 可以多跑两天,观察一下内存是否会一直上涨;谢谢!

xiaokai-wang avatar Nov 27 '19 01:11 xiaokai-wang

image

@xiaokai-wang 没有使用健康检查模块,目前一天之内就会把内存耗光,系统闲时内存不会释放,现在设置了0点自动重启,昨天7点钟就报剩余内存不足 10%了,然后进行了手动重启。

hilbert36 avatar Dec 11 '19 00:12 hilbert36

@hilbert36 目前情况怎么样

bubbleatgit avatar Apr 17 '20 11:04 bubbleatgit

目前通过每天凌晨自动重启一下释放内存

hilbert36 avatar May 03 '20 13:05 hilbert36

我们也有一样的情况出现,用 GDB dump 了一下 nginx worker 的内存,发现大量的字符串 fail_timeout ,初步估计是 struct ngx_http_upsync_conf_t 创建了不释放导致的。

killkill avatar Mar 25 '21 04:03 killkill

@killkill 内存泄漏的问题,你那边最终解决了吗?

lizj3624 avatar Feb 10 '22 09:02 lizj3624

@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)

suningzh avatar Mar 02 '22 09:03 suningzh

uscf->peer.data 一直新增,没见释放旧 peer ?

zitudu avatar Sep 08 '22 12:09 zitudu