[問題] 如何把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