La page de manuel pour systemd.exec
a une liste d'instructions LimitXXXX et un tableau pratique les comparant au ulimit
options, au moyen du setrlimit()
appel système.
Pour limiter tout l'espace d'adressage du processus (ulimit -v
) utilisez LimitAS=
. Sinon pour limiter juste la pile (ulimit -s
) utilisez LimitSTACK=
ou segment de données (ulimit -d
) utilisez LimitDATA=
Selon le setrlimit()
man page, ces limites entraîneront l'échec de l'allocation de mémoire supplémentaire. STACK et AS termineront le programme avec un sigsegv si la limite est atteinte et que la pile doit s'agrandir (et que le programme n'a pas géré cela).
Systemd prend en charge la limitation de l'utilisation de la mémoire via l'option MemoryLimit, comme décrit sur :https://www.freedesktop.org/software/systemd/man/systemd.resource-control.html
La manière dont le système gère la situation lorsque la mémoire maximale autorisée (par service) est épuisée dépend à la fois de l'implémentation sous-jacente des cgroups et de la manière dont systemd implémente le contrôle des ressources; Je suppose que le processus serait tué (via OOM killer).
Pour les limites analogues à ulimit :
man systemd.exec
...
LimitAS=(like ulimit -v)
...
LimitRSS=(like ulimit -m)
...