[问题] 如何把linux的Ram占光

楼主: LORDJACK (文亚南)   2015-02-13 17:55:25
最近公司的linux server有个问题
以前装32G的ram工作正常, 内存超过了就用page
最近把ram加到64G, 发生奇怪的问题
内存用量到24G时就会整个系统卡住, 连page也不用了
因此我想写一个程式如下
int main(void){
unsigned long int total = 0;
unsigned long int size = 1000000;
while (size > 0) {
char *p = malloc(sizeof(char) * size);
if (NULL != p) {
total += size;
output(total);
}
else {
size /= 1000;
output(total);
}
} output(total);
return 0;
}
output函数就不附上了, 就是显示用了多少G而已
这城市compiler后, 执行的成果
永远都在4G又275M
但我的系统有64G啊
请问是不是有其他的写法可以让我占用全部的RAM测试一下呢?
作者: carylorrk (carylorrk)   2015-02-13 18:15:00
单纯 user space 不行吧?
作者: descent (“雄辩是银,沉默是金”)   2015-02-13 18:19:00
printf 是用 %lx 吗?
作者: longlongint (华哥尔)   2015-02-13 18:51:00
pow(2,32) 是多少
作者: PkmX (阿猫)   2015-02-13 19:28:00
你是在32bit还是64bit的linux上跑得啊?另外linux有memory overcommitment的机制 你如果只malloc但是没有使用到该page的话 kernel根本就不会去map实体的memory给他
作者: johnpage (johnpage)   2015-02-13 20:13:00
先确认作业系统的位元,32or64
作者: LiloHuang (十年一刻)   2015-02-13 20:16:00
http://linux.die.net/man/3/malloc 建议 Note 先看熟Linux 默认是打开 overcommit 的情况下,malloc 除了要求配置大小为 0 之外,都一定会回传指标给你做 NULL 检查会造成不如预期的状况发生 ...就像 PkmX 提到的,你得真的去用该 page 才行方法也很简单,对回传的指标做 memset(p, 0x0, size);至于你只能用 4G 的情况,听起来是 32bit 的作业系统
作者: cspy (Perfect Stranger)   2015-02-13 20:42:00
死结?
作者: Baternest (忍蛋)   2015-02-13 23:08:00
作者: Push5F (帐号已卖)   2015-02-14 01:24:00
MMU max size = 4G ? if install 1G ram ,MMU = 4Gif install 5G RAM ... ???
作者: tjjh89017 (伊达政宗)   2015-02-14 18:53:00
@Push5F: 请去了解MMU的运作模式
作者: lovejomi (JOMI)   2015-02-15 02:28:00
若一定回传non null,要怎知道malloc fail呀??
作者: LiloHuang (十年一刻)   2015-02-15 21:07:00
坦白说,没办法 :) 楼上也可以关掉 overcommit

Links booklink

Contact Us: admin [ a t ] ucptt.com