He pasado 2 horas leyendo preguntas sobre este asunto, y todavía hay algunos malentendidos.
Tengo este proceso:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1452 0.4 1.8 1397012 19308 ? Sl 04:23 3:48 ./transaction_server
Esto muestra que utiliza la 19.3Mb
memoria residente del sistema (no tengo ningún archivo de intercambio), alrededor 1.8%
de la 1GB
memoria del sistema completo . El tamaño virtual es 1.39GB
?!?. He leído que ulimit -m
no funciona. La gente usa, ulimit -v
por ejemplo, configurar la memoria virtual para el proceso. ¿Es esta memoria virtual la que aparece en VSZ ps
? Qué valor debo establecer si quiero restringir este proceso para utilizar la 100MB
memoria del sistema como máximo. He leído la documentación setrlimit
y esto parece legítimo:
RLIMIT_AS
This is the maximum size of a process' total available memory,
in bytes. If this limit is exceeded, the malloc() and mmap()
functions shall fail with errno set to [ENOMEM]. In addition,
the automatic stack growth fails with the effects outlined above.
Pero en otras versiones de la documentación, este RLIMIT_AS
parámetro establece el tamaño de la memoria virtual. ¿Cuál es la verdad?