Sí, VSZ es memoria virtual. En cuanto a RLIMIT_AS, ¿dónde encontró el párrafo citado anteriormente? Dado que setrlimit(2) es una llamada al sistema Linux, no veo cómo podría monitorear malloc(3), una función de biblioteca. En su lugar, 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).)
Lamentablemente, no puede limitar RSS en Linux (esto sería ulimit -m
). Puedes probar ulimit -d
(RLIMIT_DATA), pero esto incluirá mmap(2) solo desde Linux 4.7, que normalmente se usa para grandes asignaciones. Otra posibilidad sería limitar la memoria virtual, pero con una diferencia tan grande entre RSS y VSZ, esto podría ser difícil.
Muchos procesos comparten parte de su memoria con otros procesos, p. libc es utilizado por casi todos los procesos, pero solo se asigna en la memoria una vez, pero cuenta para el uso de la memoria virtual de cada proceso. La limitación del 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 hijos para saber cómo hacerlo. Esto limitará la memoria total de un proceso y sus hijos.