找回密码
 立即注册
搜索
查看: 2284|回复: 5

[软件] linux死程帮看下!程序new不到内存,linux一定要手动释放cache么?

[复制链接]
     
发表于 2010-7-21 15:00 | 显示全部楼层 |阅读模式
程序core掉,原因在new不到内存
free一看cache占满了内存

cache不会在程序需要内存时自动腾出空间的么?一定要手动sycn然后在proc里drop掉?
new不到内存是程序本身的内存释放没写好造成的么?

ps:我不是死程我是管服务器的,c只会排序。
回复

使用道具 举报

发表于 2010-7-21 15:05 | 显示全部楼层
cache不需要你管,OS会处理掉
new不到内存那是程序吃的内存太多了,让写那个程序的用valgrind自己测测怎么回事
回复

使用道具 举报

     
 楼主| 发表于 2010-7-21 15:10 | 显示全部楼层
cache不需要你管,OS会处理掉
new不到内存那是程序吃的内存太多了,让写那个程序的用valgrind自己测测怎么回事
鸡蛋灌饼 发表于 2010-7-21 15:05


维护过的已经开始valgrind了

但是出错的时候cache了2g多,free只有28M,然然后它们查到new不到内存,很难不联想到cache释放问题....
其实我本人是不怀疑linux的cache机制的,但是写程序的认为是cache满了内存
回复

使用道具 举报

发表于 2010-7-21 15:28 | 显示全部楼层
维护过的已经开始valgrind了

但是出错的时候cache了2g多,free只有28M,然然后它们查到new不到内存,很难不联想到cache释放问题....
其实我本人是不怀疑linux的cache机制的,但是写程序的认为是cache满了内存 ...
赤色彗星SEXY 发表于 2010/7/21 15:10

进程吃了多少内存,全局catch bad_alloc异常然后把程序停下看看。

我估计是把3G用户空间用干净了吧……
回复

使用道具 举报

     
 楼主| 发表于 2010-7-21 15:58 | 显示全部楼层
本帖最后由 赤色彗星SEXY 于 2010-7-21 16:05 编辑

顺便问下和系统设置的堆栈大小有关系么?
出问题那的机器堆栈大小改成了6M而不是默认的10M

3g用户空间用尽?用光了不放cache么?
回复

使用道具 举报

发表于 2010-7-21 19:22 | 显示全部楼层
顺便问下和系统设置的堆栈大小有关系么?
出问题那的机器堆栈大小改成了6M而不是默认的10M
赤色彗星SEXY 发表于 2010/7/21 15:58


开一个线程就要10MB,开上100个1G内存就没了——不是被占用了,而是这1000M内存被保留作为栈地址了。
当然你这改小了会好一点,但是也不能滥开线程。
3g用户空间用尽?用光了不放cache么?
赤色彗星SEXY 发表于 2010/7/21 15:58

x86的Linux一个进程就那么点地址,给你1T物理内存一个进程也只能用4G——这4G还得被内核留1G用。
要用2G以上内存的最好上64位系统,相当一部分情况下64位系统的性能提升得益于进程地址空间的扩大。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|上海互联网违法和不良信息举报中心|网上有害信息举报专区|962110 反电信诈骗|举报电话 021-62035905|Stage1st ( 沪ICP备13020230号-1|沪公网安备 31010702007642号 )

GMT+8, 2025-9-18 05:38 , Processed in 0.097360 second(s), 7 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表