[問題] 如何把linux的Ram佔光

看板C_and_CPP作者 (文亞南)時間9年前 (2015/02/13 17:55), 編輯推噓7(7015)
留言22則, 11人參與, 最新討論串1/2 (看更多)
最近公司的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測試一下呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 218.161.2.89 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1423821329.A.A5F.html

02/13 18:15, , 1F
單純 user space 不行吧?
02/13 18:15, 1F

02/13 18:19, , 2F
printf 是用 %lx 嗎?
02/13 18:19, 2F

02/13 18:51, , 3F
pow(2,32) 是多少
02/13 18:51, 3F

02/13 19:28, , 4F
你是在32bit還是64bit的linux上跑得啊?
02/13 19:28, 4F

02/13 19:30, , 5F
另外linux有memory overcommitment的機制 你如果只malloc
02/13 19:30, 5F

02/13 19:33, , 6F
但是沒有使用到該page的話 kernel根本就不會去map實體的
02/13 19:33, 6F

02/13 19:33, , 7F
memory給他
02/13 19:33, 7F

02/13 20:13, , 8F
先確認作業系統的位元,32or64
02/13 20:13, 8F

02/13 20:16, , 9F
http://linux.die.net/man/3/malloc 建議 Note 先看熟
02/13 20:16, 9F

02/13 20:17, , 10F
Linux 預設是打開 overcommit 的情況下,malloc 除了
02/13 20:17, 10F

02/13 20:19, , 11F
要求配置大小為 0 之外,都一定會回傳指標給你
02/13 20:19, 11F

02/13 20:20, , 12F
做 NULL 檢查會造成不如預期的狀況發生 ...
02/13 20:20, 12F

02/13 20:20, , 13F
就像 PkmX 提到的,你得真的去用該 page 才行
02/13 20:20, 13F

02/13 20:21, , 14F
方法也很簡單,對回傳的指標做 memset(p, 0x0, size);
02/13 20:21, 14F

02/13 20:22, , 15F
至於你只能用 4G 的情況,聽起來是 32bit 的作業系統
02/13 20:22, 15F

02/13 20:42, , 16F
死結?
02/13 20:42, 16F

02/13 23:08, , 17F
02/13 23:08, 17F

02/14 01:24, , 18F
MMU max size = 4G ? if install 1G ram ,MMU = 4G
02/14 01:24, 18F

02/14 01:25, , 19F
if install 5G RAM ... ???
02/14 01:25, 19F

02/14 18:53, , 20F
@Push5F: 請去了解MMU的運作模式
02/14 18:53, 20F

02/15 02:28, , 21F
若一定回傳non null,要怎知道malloc fail呀??
02/15 02:28, 21F

02/15 21:07, , 22F
坦白說,沒辦法 :) 樓上也可以關掉 overcommit
02/15 21:07, 22F
文章代碼(AID): #1KtSeHfV (C_and_CPP)
文章代碼(AID): #1KtSeHfV (C_and_CPP)