用libevent中的bufferevent进行IO操作,内存占用一直增长

时间:2022-07-17 00:19:02
客户端connect服务端之后,加入bufferevent事件,出现如题的问题,一直无法解决。贴出代码

event_sub = bufferevent_socket_new(base, sock_g, BEV_OPT_CLOSE_ON_FREE);
bufferevent_setcb(event_sub, readcb, NULL, errorcb, (void*)funcHandler);
bufferevent_enable(event_sub, EV_READ|EV_WRITE);
event_base_dispatch(base);

运行后,一直内存占用一直增长,搞不清什么原因

11 个解决方案

#1


参考系统自带相关源代码。

#2


看看响应函数里的内存分配情况

#3


引用 2 楼 focuslight 的回复:
看看响应函数里的内存分配情况

响应函数里没有在堆内申请内存,所以不存在占用不释放的情况,我试过把响应函数的内容只加一句清空缓冲区的语句,还是存在内存一直增长的问题,所以不知道是不是我代码的问题

#4


引用 1 楼 zhao4zhong1 的回复:
参考系统自带相关源代码。

系统自带源码一时研究不清,所以来问问各位

#5


我的是客户端程序,上述代码是在连接服务端之后想进行一个IO的回调,不知道是不是这种方式不对

#6


可能是什么循环里有问题

#7


引用 6 楼 focuslight 的回复:
可能是什么循环里有问题

这段程序就一个这个event_base_dispatch(base),而且如果不发生IO,内存不增加,发生IO后,内存占用就开始增长,所以我觉得可能是我的程序的问题,但是功能都实现了,就发生了这个问题一直解决不了啊

#8


哪位大神能指点一下啊。。。

#9


你一直往sock写,但对面不读,那么后续数据都被libevent缓存到buffer里了,当然会越来越多。

#10


引用 9 楼 qq120848369 的回复:
你一直往sock写,但对面不读,那么后续数据都被libevent缓存到buffer里了,当然会越来越多。

我在回调函数中用了一个bufferevent_readln()函数,读的同时清空,还是会有这样的问题。我想知道我这么用,是不是有问题。

#11


解决了,原因是bufferevent_readln()后,没有对其进行释放

#1


参考系统自带相关源代码。

#2


看看响应函数里的内存分配情况

#3


引用 2 楼 focuslight 的回复:
看看响应函数里的内存分配情况

响应函数里没有在堆内申请内存,所以不存在占用不释放的情况,我试过把响应函数的内容只加一句清空缓冲区的语句,还是存在内存一直增长的问题,所以不知道是不是我代码的问题

#4


引用 1 楼 zhao4zhong1 的回复:
参考系统自带相关源代码。

系统自带源码一时研究不清,所以来问问各位

#5


我的是客户端程序,上述代码是在连接服务端之后想进行一个IO的回调,不知道是不是这种方式不对

#6


可能是什么循环里有问题

#7


引用 6 楼 focuslight 的回复:
可能是什么循环里有问题

这段程序就一个这个event_base_dispatch(base),而且如果不发生IO,内存不增加,发生IO后,内存占用就开始增长,所以我觉得可能是我的程序的问题,但是功能都实现了,就发生了这个问题一直解决不了啊

#8


哪位大神能指点一下啊。。。

#9


你一直往sock写,但对面不读,那么后续数据都被libevent缓存到buffer里了,当然会越来越多。

#10


引用 9 楼 qq120848369 的回复:
你一直往sock写,但对面不读,那么后续数据都被libevent缓存到buffer里了,当然会越来越多。

我在回调函数中用了一个bufferevent_readln()函数,读的同时清空,还是会有这样的问题。我想知道我这么用,是不是有问题。

#11


解决了,原因是bufferevent_readln()后,没有对其进行释放