[kde-china] Re: 监视器中CPU占有率的disk sleep是什么意思?

Shen Miren dickeny在gmail.com
星期二 四月 26 18:40:43 CEST 2011


测试了一下,malloc(100M)是会返回NULL的。malloc(5M)不会返回NULL,直接被killed。

我的测试,从200M开始,开了多个./testa耗到1800M(都是stoped暂停住),然后开若干个./testb慢慢5M地吃内存。程序在不停吃
内存时,free -m状态为:
             total       used       free     shared    buffers     cached
Mem:          1978       1892         85          0          1         20
-/+ buffers/cache:       1871        107
Swap:            0          0          0

这时候系统已经出现了迟钝的现象,笔记本的硬盘灯也在狂闪(不明白为啥闪)
系统迟钝得会导致cd /home/都半天没反应,猜测kernel正在整理内存,挤处还没用的内存,榨干剩余价值。

可是,这时候已经卡得不行了!!!而且继续吃内存的话,也是新开的程序被killed,那些100M大户还活着。如果是桌面环境,估计大
多数人都已经按电源键解救了。。。

疑惑:
1、内存即将耗尽时,kernel是在压榨更多内存么?
2、假设是在压榨内存,为啥硬盘灯会狂闪?(swap已经关闭)
3、内存爆掉,kernel为啥不去kill大户,而是kill新程序?(这根本不能解决桌面环境上的情况,应该去kill FF之类的)

目前感觉,依靠kernel获得较好的桌面体验,根本不靠谱。。。

> 2011/4/25 Shen Miren <dickeny在gmail.com>:
> > ”内核本身是能够把过量使用内存的进程干掉的。“
> > 求问这个如何设置。
> 
> 这个一般是自动的。除非你定制了特殊的内核。
> 
> 你可以验证一下:
> 
> 可以写个程序,分配100M内存,然后往这段内存中写满随机的数据。然后再分配100M内存,以此循环。很快可以观察到此程序被内
核干掉了。注意分配内存后必须
> 写满数据才真正有效,否则实际占用的内存仅限于你写有数据的那些区块。
> 
> 这个特性带来的另外一个副作用是:在 Linux 下  malloc() 函数”正常使用时“永远不会返回 NULL!你几乎永远能够得到你想
> malloc() 的内存,当内存耗尽时,你也不会得到NULL,而是你的进程被干掉了。
> 
> ——如果你想要防止你的进程被干掉,想要对内存耗尽的情况作处理,这变得很难。——swap 机制此时起作用了,因为 swap
> 造成系统变卡之后,你可能遇到一些动作的超时,根据大量的超时你可以预测出此时内存耗尽,开始进行大量的 swap
> 交换,通过超时进行你想要的相关处理。
> _______________________________________________
> kde-china mailing list
> kde-china在kde.org
> https://mail.kde.org/mailman/listinfo/kde-china
-------------- 下一部分 --------------
一个非文本附件被清除...
发信人: %(who)s
主题: %(subject)s
日期: %(date)s
大小: 490
Url: http://mail.kde.org/pipermail/kde-china/attachments/20110427/25cf6d29/attachment.sig 


关于邮件列表 kde-china 的更多信息