日期:2014-05-16  浏览次数:20542 次

服务器进程内存释放的问题
新写的服务器进程,简单的测试下网络模块的压力承受能力,网络线程收到消息压入消息队列,逻辑线程不断的取消息将消息原样发回客户端(压如发送消息队列,待网络线程来发送),也就是回显。
我在消息队列,连接都使用了缓冲,预先分配一定量数量的连接和消息,也隔一段时间去统计回收,当空闲的连接或者消息量在这段时间内的平均值大于初始的数量,就回收一部分。想做到随着用户数的变化,系统内存也能随之变化,又兼顾缓冲的问题。
问题来了,1W用户的时候内存占有量46M,1W用户完全断开,上面说的回收也确实回收了,内存占有量还是46M,一直不减少。再重新连1W用户,内存稍稍有所变化也就增加1M的样子,1W用户断开连接,内存还是不变。增加到3W,5W用户,内存都只有随用户最大量加大而加大。0用户也不见减少,内存确实是释放了。
看到论坛说glibc库管理的内存,但是按照那种方式,内存占有量应该也是会下降,不会只曾不减。
求大神帮忙,这是什么问题?怎么解决?
要实现内存使用量随用户数变化而变化,又兼顾缓冲,我上面的设计可否行得通?有什么更好的办法?

------解决方案--------------------
引用:
Quote: 引用:

操作系统没回收吗?


现在看来是没有,所以才求助

系统内存够,不一定及时回收内存啊,或者称为:缓存??
------解决方案--------------------
lz 怎么看内存的 ps aux ?
------解决方案--------------------
C++实现的?
------解决方案--------------------
引用:
Quote: 引用:

C++实现的?


嗯,是的,new delete分配回收的内存。
看到过以前的一个帖子,说glibc管理的内存,但是按照那贴上说的,还是不符合我现在的情况。
现在是回收了,完全没看到占用量减少


考虑是否有什么STL容器的内部内存没有释放,因为压力增加会导致capacity增加而不会释放。