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