2010-07-29 10 views
10

comienzo una nueva cáscara del golpe, y ejecutar:¿Por qué ulimit no puede limitar la memoria residente con éxito y cómo?

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 
" 

y luego, ejecuto la compilación de un proyecto de gran envergadura. el Vínculo de la misma usará memoria grande, más que 2G. El resultado, el proceso, usó más que la memoria residente 2G.

¿Hay algún error? cómo usar ulimit o puedo usar otros programas para limitar la memoria residente?

el objetivo de limitar la memoria residente, es porque la computadora se congelará cuando un proceso casi use toda la memoria.

+1

debería pasar a serverfault.com? – oluies

Respuesta

7

De acuerdo con la página del manual de setrlimit:

RLIMIT_RSS

Especifica el límite (en páginas) del conjunto residente del proceso (el número de páginas virtuales residentes en RAM). Este límite solamente tiene efecto en Linux 2.4.x, x < 30, y no sólo afecta a las llamadas a madvise (2) MADV_WILLNEED especificando

Es posible que desee establecer el tamaño de la memoria virtual en lugar, a través de ulimit -v

+8

NO, solo quiero limitar la memoria residente. Si limito la memoria virtual, el programa ld terminará la ejecución e informará que la memoria está agotada. – sean

+0

Para el problema en particular que tenía (grandes cantidades de memoria utilizada para vincular) podría ser útil usar el vinculador de oro en lugar de ld. –

Cuestiones relacionadas