看板 C_and_CPP 關於我們 聯絡資訊
最近公司的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
carylorrk: 單純 user space 不行吧? 02/13 18:15
descent: printf 是用 %lx 嗎? 02/13 18:19
longlongint: pow(2,32) 是多少 02/13 18:51
PkmX: 你是在32bit還是64bit的linux上跑得啊? 02/13 19:28
PkmX: 另外linux有memory overcommitment的機制 你如果只malloc 02/13 19:30
PkmX: 但是沒有使用到該page的話 kernel根本就不會去map實體的 02/13 19:33
PkmX: memory給他 02/13 19:33
johnpage: 先確認作業系統的位元,32or64 02/13 20:13
LiloHuang: http://linux.die.net/man/3/malloc 建議 Note 先看熟 02/13 20:16
LiloHuang: Linux 預設是打開 overcommit 的情況下,malloc 除了 02/13 20:17
LiloHuang: 要求配置大小為 0 之外,都一定會回傳指標給你 02/13 20:19
LiloHuang: 做 NULL 檢查會造成不如預期的狀況發生 ... 02/13 20:20
LiloHuang: 就像 PkmX 提到的,你得真的去用該 page 才行 02/13 20:20
LiloHuang: 方法也很簡單,對回傳的指標做 memset(p, 0x0, size); 02/13 20:21
LiloHuang: 至於你只能用 4G 的情況,聽起來是 32bit 的作業系統 02/13 20:22
cspy: 死結? 02/13 20:42
Baternest: 試一下這個 http://pyropus.ca/software/memtester/ 02/13 23:08
Push5F: MMU max size = 4G ? if install 1G ram ,MMU = 4G 02/14 01:24
Push5F: if install 5G RAM ... ??? 02/14 01:25
tjjh89017: @Push5F: 請去了解MMU的運作模式 02/14 18:53
lovejomi: 若一定回傳non null,要怎知道malloc fail呀?? 02/15 02:28
LiloHuang: 坦白說,沒辦法 :) 樓上也可以關掉 overcommit 02/15 21:07