2010-07-29 30 views
10

我開始一個新的bash shell,然後執行:爲什麼ulimit無法成功限制常駐記憶,以及如何?

ulimit -m 102400 
ulimit -a 
" 
core file size   (blocks, -c) 0 
data seg size   (kbytes, -d) unlimited 
scheduling priority    (-e) 20 
file size    (blocks, -f) unlimited 
pending signals     (-i) 16382 
max locked memory  (kbytes, -l) 64 
max memory size   (kbytes, -m) 102400 
open files      (-n) 1024 
pipe size   (512 bytes, -p) 8 
POSIX message queues  (bytes, -q) 819200 
real-time priority    (-r) 0 
stack size    (kbytes, -s) 8192 
cpu time    (seconds, -t) unlimited 
max user processes    (-u) unlimited 
virtual memory   (kbytes, -v) unlimited 
file locks      (-x) unlimited 
" 

,然後,我執行編譯一個巨大的工程。它的鏈接將使用大內存,超過2G。結果,進程ld使用了超過2G的常駐內存。

有什麼問題嗎?如何使用ulimit或可以使用其他程序來限制常駐內存?

限制常駐內存的目標,是因爲一個進程幾乎使用了所有內存時計算機會凍結。

+1

應該移至serverfault.com? – oluies 2010-07-29 08:00:00

回答

7

據爲setrlimit手冊頁:

RLIMIT_RSS

指定進程的駐留集(虛擬頁面駐留在內存的數量)的限制(以頁)。這種限制僅在由於Linux 2.4.X的作用,×< 30,而且隻影響調用的madvise(2)指定MADV_WILLNEED

你可能想設置虛擬內存大小,而不是通過ulimit -v

+8

不,我只是想限制常駐記憶。如果我限制虛擬內存,ld程序將終止執行,並報告內存已耗盡。 – sean 2010-07-30 03:16:04

+0

對於您遇到的特定問題(大量內存用於鏈接),可能有助於使用gold鏈接程序而不是ld。 – 2011-05-22 16:06:19

相關問題