Re: [問題] 如何把linux的Ram佔光
※ 引述《LORDJACK (文亞南)》之銘言:
: 最近公司的linux server有個問題
: 以前裝32G的ram工作正常, 記憶體超過了就用page
: 最近把ram加到64G, 發生奇怪的問題
: 記憶體用量到24G時就會整個系統卡住, 連page也不用了
: 因此我想寫一個程式如下
沒有真的跑, 試看看吧.
簡單說就是一直 fork 到 fork 不了為止
#define SIZE_4GB 0x100000000UL
int g_n = 0;
int main(void)
{
pid_t pid;
char *buf;
pid = fork();
if (pid < 0) // fork fail
{
printf("\nFork fail! => total malloc size = %d (GB)\n", 4*g_n);
return 1;
}
// else, fork success
if (pid == 0) // child process
{
if ((buf = (char *)malloc(SIZE_4GB)) != NULL)
{
memset(buf, 0x00, SIZE_4GB);
g_n++;
printf("child (%6d) : %d\n", pid, g_n);
}
else
printf("child (%6d) : malloc fail! g_n = %d\n", pid, g_n);
}
else
{
//Parent process, do nothing.
printf("parent (%6d) : do nothing\n", getpid());
}
return 0;
}
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.43.215.67
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1423832920.A.D78.html
※ 編輯: lf5471 (114.43.215.67), 02/13/2015 21:09:42
※ 編輯: lf5471 (114.43.215.67), 02/13/2015 21:10:35
→
02/13 21:17, , 1F
02/13 21:17, 1F
→
02/14 11:11, , 2F
02/14 11:11, 2F
→
02/14 11:11, , 3F
02/14 11:11, 3F
修改過程式碼: http://pastie.org/9946175
在 XP 下用 Cygwin 跑了 2 次.
第 1 次很慘, 電腦當掉. 只好加個 REAL_WORK flag
手邊沒有 linux, 所以我不確定若實際在 linux 上跑會怎樣.
(Cygwin 中間隔一層 WinXP)
關於 fork bomb, 一般它是 "限制 user 只能開到 MAX # process 個數" 來做.
請參考 ulimit 指令.
現在問題來了, 假設今天 MAX # 是 100 好了.
那我每次 4GB =>
只要 fork 個 16 次, 就能到 64GB, 離 100 還很遠,
就能達到塞爆 RAM 的目標 XDDD
我猜, 最後, 還是得實際去把電腦弄掛做實驗才能知道真實的狀態.
※ 編輯: lf5471 (114.43.215.67), 02/14/2015 16:10:35
→
02/14 16:11, , 4F
02/14 16:11, 4F
→
02/14 20:15, , 5F
02/14 20:15, 5F
→
02/14 20:16, , 6F
02/14 20:16, 6F
推
02/15 00:32, , 7F
02/15 00:32, 7F
→
02/15 00:32, , 8F
02/15 00:32, 8F
→
02/15 00:39, , 9F
02/15 00:39, 9F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):