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.3Mbmemoria residente del sistema (no tengo ningún archivo de intercambio), alrededor 1.8%de la 1GBmemoria del sistema completo . El tamaño virtual es 1.39GB?!?. He leído que ulimit -mno funciona. La gente usa, ulimit -vpor 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 100MBmemoria del sistema como máximo. He leído la documentación setrlimity 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_ASparámetro establece el tamaño de la memoria virtual. ¿Cuál es la verdad?

Respuestas:
Sí, VSZ es memoria virtual. En cuanto a RLIMIT_AS, ¿dónde encontraste el párrafo citado anteriormente? Como setrlimit (2) es una llamada al sistema Linux, no veo cómo podría monitorear malloc (3), una función de biblioteca. En cambio, solo puede funcionar con brk (2), sbrk (2) y mmap (2); esto también es lo que sugiere su página de manual (comprobada en Scientific Linux). Sin embargo, la cantidad total de memoria solicitada a través de estas funciones es memoria virtual, por lo que RLIMIT_AS limita la memoria virtual. (Esto es, de nuevo, de acuerdo con la página de manual de setrlimit (2)).
Desafortunadamente, no puede limitar RSS en Linux (esto sería
ulimit -m). Puede probarulimit -d(RLIMIT_DATA), pero esto ignorará mmap (2), que generalmente se usa para asignaciones grandes. Otra posibilidad sería limitar la memoria virtual, pero con una diferencia tan grande entre RSS y VSZ, esto podría ser difícil.fuente
setrlimitpágina de manualIEEE/The Open Group 2003 GETRLIMIT(3P)¿Cómopspuede mostrarme el RSS, pero el núcleo no puede imponer un límite?ulimit -dentonces. La aplicación fue escrita por mí y no la utilicémmap().Muchos procesos comparten parte de su memoria con otros procesos, por ejemplo, libc se usa en casi todos los procesos, pero solo se asigna en la memoria una vez, pero cuenta para el uso de memoria virtual de cada proceso. Limitar el uso de la memoria que solo usa un determinado proceso (principalmente RSS) se puede hacer usando cgroups. Vea las respuestas a Cómo limitar los recursos totales (memoria) de un proceso y sus elementos secundarios para saber cómo hacerlo. Esto limitará la memoria total de un proceso y sus hijos.
fuente