Ja, VSZ ist virtueller Speicher. Was RLIMIT_AS betrifft, wo haben Sie den oben zitierten Absatz gefunden? Da setrlimit(2) ein Linux-Systemaufruf ist, sehe ich nicht, wie es möglicherweise malloc(3), eine Bibliotheksfunktion, überwachen könnte. Stattdessen kann es nur mit brk(2), sbrk(2) und mmap(2) arbeiten -- dies schlägt auch seine Manpage (überprüft von Scientific Linux) vor. Die Gesamtmenge an Speicher, die über diese Funktionen angefordert wird, ist jedoch virtuellen Speicher, sodass RLIMIT_AS tatsächlich den virtuellen Speicher begrenzt. (Dies entspricht wiederum der Manpage setrlimit(2).)
Leider können Sie RSS unter Linux nicht einschränken (dies wäre ulimit -m
). Sie können ulimit -d
versuchen (RLIMIT_DATA), aber dies schließt mmap(2) erst seit Linux 4.7 ein, das normalerweise für große Zuweisungen verwendet wird. Eine andere Möglichkeit wäre, den virtuellen Speicher zu begrenzen, aber bei einem so großen Unterschied zwischen RSS und VSZ könnte dies schwierig sein.
Viele Prozesse teilen einen Teil ihres Speichers mit anderen Prozessen, z. libc wird von fast jedem Prozess verwendet, aber nur einmal im Speicher abgebildet, aber es zählt zur virtuellen Speichernutzung jedes Prozesses. Die Beschränkung der Speichernutzung, die nur von einem bestimmten Prozess (meistens RSS) verwendet wird, kann mithilfe von cgroups erfolgen. Siehe Antworten auf So begrenzen Sie die Gesamtressourcen (Speicher) eines Prozesses und seiner untergeordneten Elemente für die Vorgehensweise. Dadurch wird der Gesamtspeicher eines Prozesses und seiner Kinder begrenzt.