2010-07-29 14 views
10

Je commence un nouveau shell bash, et Execute:Pourquoi ulimit ne peut pas limiter la mémoire résidente et comment?

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 
" 

puis, j'exécutons la compilation d'un grand projet. le Linking utilisera une grande mémoire, plus de 2G. Le résultat, le processus ld utilisé plus de mémoire résidente 2G.

Y at-il un problème? comment utiliser ulimit ou puis-je utiliser d'autres programmes pour limiter la mémoire résidente?

La cible de la mémoire résidente limite est parce que l'ordinateur va geler quand un processus a presque utilisé toute la mémoire.

+1

devrait passer à serverfault.com? – oluies

Répondre

7

Selon la page de manuel pour setrlimit:

RLIMIT_RSS

Indique la limite (en pages) du jeu résident du processus (le nombre de pages virtuelles résidant dans la RAM). Cette limite n'a d'effet que Linux 2.4.x, x < 30, et il ne concerne que les appels madvise (2) spécifiant MADV_WILLNEED

Vous voulez probablement définir la taille de la mémoire virtuelle au lieu, par l'intermédiaire ulimit -v

+8

NON, je veux juste limiter la mémoire résidente. Si je limite la mémoire virtuelle, le programme ld terminera l'exécution et signalera que la mémoire est épuisée. – sean

+0

Pour le problème particulier que vous avez eu (de grandes quantités de mémoire utilisées pour la liaison), il peut être utile d'utiliser l'éditeur de liens gold au lieu de ld. –