Die Manpage für systemd.exec
hat eine Liste von LimitXXXX-Anweisungen und eine praktische Tabelle, die sie mit ulimit
vergleicht Optionen, über setrlimit()
Systemaufruf.
Um den gesamten Adressraum des Prozesses (ulimit -v
) verwenden Sie LimitAS=
. Sonst limitiert man nur den Stack (ulimit -s
) verwenden Sie LimitSTACK=
oder Datensegment (ulimit -d
) verwenden Sie LimitDATA=
Gemäß setrlimit()
manpage, führen diese Beschränkungen dazu, dass die Zuweisung von zusätzlichem Speicher fehlschlägt. STACK und AS beenden das Programm mit einem sigsegv, wenn das Limit erreicht ist und der Stack wachsen muss (und das Programm hat dies nicht gehandhabt).
Systemd unterstützt die Begrenzung der Speichernutzung über die MemoryLimit-Option, wie beschrieben unter:https://www.freedesktop.org/software/systemd/man/systemd.resource-control.html
Die Art und Weise, wie das System mit der Situation umgeht, wenn der maximal zulässige Speicher (pro Dienst) erschöpft ist, hängt sowohl von der zugrunde liegenden cgroups-Implementierung als auch von der Art und Weise ab, wie systemd die Ressourcenkontrolle implementiert; Ich vermute, dass der Prozess beendet werden würde (über OOM Killer).
Für Limits analog zu ulimit:
man systemd.exec
...
LimitAS=(like ulimit -v)
...
LimitRSS=(like ulimit -m)
...