brpc http_c++示例代码修改 server端接收后创建clinet发送数据发现可能存在内存泄露
Describe the bug (描述bug) http brpc server端接收后创建client发送数据,内存泄露
To Reproduce (复现方法)
基于Release1.7.0 brpc代码修改brpc http_c++示例代码;
1、在收到客户端访问v1/queue/stats 后开辟线程做一次brpc send(v1/start)
2、客户端每执行一次,server进程都有20KB左右物理内存增加
./http_client http://kkuser-virtual-machine:8010/v1/queue/stats
Expected behavior (期望行为) 内存不会持续增加
Versions (各种版本) OS: Compiler: brpc: V1.7.0 protobuf:3.14.0
Additional context/screenshots (更多上下文/截图)
这看着和brpc没关系吧,更像是业务代码问题,你用的std的线程,它的生命周期应该是你来维护而不是期望brpc来维护,先看看自己的业务代码有没有什么问题吧,是不是在里面分配了内存
可以用heap profiler确认一下哪里有内存泄漏
这看着和brpc没关系吧,更像是业务代码问题,你用的std的线程,它的生命周期应该是你来维护而不是期望brpc来维护,先看看自己的业务代码有没有什么问题吧,是不是在里面分配了内存
线程代码也已经贴截图了,线程里面是作为客户端发了一次brpc请求,没有申请内存;
可以用heap profiler确认一下哪里有内存泄漏
好,我试一下,目前观察到随着brpc通讯次数增加有个大约20M左右内存增长,后面就不会增加了。
这看着和brpc没关系吧,更像是业务代码问题,你用的std的线程,它的生命周期应该是你来维护而不是期望brpc来维护,先看看自己的业务代码有没有什么问题吧,是不是在里面分配了内存
线程代码也已经贴截图了,线程里面是作为客户端发了一次brpc请求,没有申请内存;
线程是你的客户端代码吧,内存增长的是server端么?
这看着和brpc没关系吧,更像是业务代码问题,你用的std的线程,它的生命周期应该是你来维护而不是期望brpc来维护,先看看自己的业务代码有没有什么问题吧,是不是在里面分配了内存
线程代码也已经贴截图了,线程里面是作为客户端发了一次brpc请求,没有申请内存;
线程是你的客户端代码吧,内存增长的是server端么?
线程代码是服务端代码,模拟服务端作为客户端发送brpc请求给自己。 是的,服务端内存增长
可以用heap profiler确认一下哪里有内存泄漏 brpcheap.zip 已经导出,帮忙看一下 @chenBright
@ike47 按照文档指引,直接在内置服务看吧。profile不仅需要profile数据,还需要可行性文件。
heaptxt.zip @chenBright 我在内置服务里导出成txt了
heap看着正常。涨的内存会不会缓存在tcmalloc freelist了?