linux死程帮看下!程序new不到内存,linux一定要手动释放cache么?
程序core掉,原因在new不到内存free一看cache占满了内存
cache不会在程序需要内存时自动腾出空间的么?一定要手动sycn然后在proc里drop掉?
new不到内存是程序本身的内存释放没写好造成的么?
ps:我不是死程我是管服务器的,c只会排序。 cache不需要你管,OS会处理掉
new不到内存那是程序吃的内存太多了,让写那个程序的用valgrind自己测测怎么回事 cache不需要你管,OS会处理掉
new不到内存那是程序吃的内存太多了,让写那个程序的用valgrind自己测测怎么回事
鸡蛋灌饼 发表于 2010-7-21 15:05 http://bbs.saraba1st.com/2b/images/common/back.gif
维护过的已经开始valgrind了
但是出错的时候cache了2g多,free只有28M,然然后它们查到new不到内存,很难不联想到cache释放问题....
其实我本人是不怀疑linux的cache机制的,但是写程序的认为是cache满了内存
维护过的已经开始valgrind了
但是出错的时候cache了2g多,free只有28M,然然后它们查到new不到内存,很难不联想到cache释放问题....
其实我本人是不怀疑linux的cache机制的,但是写程序的认为是cache满了内存 ...
赤色彗星SEXY 发表于 2010/7/21 15:10 http://bbs.saraba1st.com/2b/images/common/back.gif
进程吃了多少内存,全局catch bad_alloc异常然后把程序停下看看。
我估计是把3G用户空间用干净了吧…… 本帖最后由 赤色彗星SEXY 于 2010-7-21 16:05 编辑
顺便问下和系统设置的堆栈大小有关系么?
出问题那的机器堆栈大小改成了6M而不是默认的10M
3g用户空间用尽?用光了不放cache么? 顺便问下和系统设置的堆栈大小有关系么?
出问题那的机器堆栈大小改成了6M而不是默认的10M
赤色彗星SEXY 发表于 2010/7/21 15:58 http://bbs.saraba1st.com/2b/images/common/back.gif
有
开一个线程就要10MB,开上100个1G内存就没了——不是被占用了,而是这1000M内存被保留作为栈地址了。
当然你这改小了会好一点,但是也不能滥开线程。
3g用户空间用尽?用光了不放cache么?
赤色彗星SEXY 发表于 2010/7/21 15:58 http://bbs.saraba1st.com/2b/images/common/back.gif
x86的Linux一个进程就那么点地址,给你1T物理内存一个进程也只能用4G——这4G还得被内核留1G用。
要用2G以上内存的最好上64位系统,相当一部分情况下64位系统的性能提升得益于进程地址空间的扩大。
页:
[1]