免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: licaduo
打印 上一主题 下一主题

Ubuntu下的多线程c++开发,遇到了一个内存释放的问题,求高人指点下 [复制链接]

论坛徽章:
1
双子座
日期:2014-08-29 17:15:03
11 [报告]
发表于 2010-12-05 20:40 |只看该作者
會不會是stl容器的內存分配並沒有釋放的原因?  queue list刪除節點時候會不會立馬釋放內存呢?

內存池的話可以用boost中的object pool 吧。

還有就是遇到大量數據包來臨的時候,是不是應該是做一下限制, 而不是一味講收到的數據接受進來? 抑或是應該增加處理的速度或者是增加處理的綫程數量?

论坛徽章:
0
12 [报告]
发表于 2010-12-05 21:53 |只看该作者
楼上的建议我确实需要仔细考虑下,

论坛徽章:
0
13 [报告]
发表于 2010-12-05 21:56 |只看该作者
會不會是stl容器的內存分配並沒有釋放的原因?  queue list刪除節點時候會不會立馬釋放內存呢?

这个确实是需要研究下,我自己放入stl容器的内存用完了是释放了的,但是stl本身的内存有没有释放确实没有控制,不知道怎么去控制这个。我好好研究下这个。
内存池,我也考虑下。

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
14 [报告]
发表于 2010-12-06 00:09 |只看该作者
我不知道stl里面是什么实现的,但glibc malloc的实现,如果最顶端的内存在用,那么无论中间的内存在不在用都不能释放的

论坛徽章:
0
15 [报告]
发表于 2010-12-06 07:54 |只看该作者
问题基本上可以确定是allocator的问题。SGI STL/STLort  的allocator不会自动释放内存,所以程序的内存占用取决于最高峰的时候所有容器占用多少内存。
你可以打开STL的源文件看看版权声明,以确定是什么版本的STL
另外你可以尝试使用  std::list<obj*,  std::allocator<obj*> >  memQueue,或者  std::list<obj*,  std::allocator > .

还有,你的设计存在问题,试想,如果 inQueue里面右面已经有  1000条记录,这就说明你的业务线程根本就处理不过来,而此时你允许往inQueue里面再添加数据,其实是没有意义的。正确的做法是限制 Queue的大小为N,如果已经到达了N,网络线程就阻塞。

论坛徽章:
0
16 [报告]
发表于 2010-12-06 10:52 |只看该作者
stl + c++ 服务器 运行5个月。内存无明显增长的飘过。
毫无压力。

动态的申请 或者删除 很大的string  会遇到 问题。 没找到解决方案,自己new delete 解决。

应该是你的代码本身有泄漏。

不要小看现在 OS 的内存管理能力。  多在自己的身上找问题。 你这种情况 可以说很明显的 泄漏了,
在类身上加 计数器。 日志打印计数器 很快就能看到问题。

论坛徽章:
0
17 [报告]
发表于 2010-12-06 13:56 |只看该作者
问题基本上可以确定是allocator的问题。SGI STL/STLort  的allocator不会自动释放内存,所以程序的内存占用 ...
hzhzorange 发表于 2010-12-06 07:54



    这位仁兄说的对,如果业务处理不过来,你接收新信息反而会导致系统性能下降,很快达到瓶颈,另外,楼上说用内存池不错,TCMalloc也很不错,它实际也是个内存池管理

论坛徽章:
0
18 [报告]
发表于 2010-12-06 17:22 |只看该作者
我今天又改了代码,观察了半天,内存占用基本控制下来了,多谢各位的指点。
现在的解决方式是在放入队列的 数据结构中又用了指针,相当于用两层的指针保存网络数据。
另外我也很怀疑string的内存释放问题。但是今天白天的程序表现还可以,再观察几天,看看是不是真的解决了问题。具体的原因再研究研究。
再次感谢各位的指点
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP