La manpage per systemd.exec
ha un elenco di istruzioni LimitXXXX e una comoda tabella che le confronta con le ulimit
opzioni, tramite setrlimit()
chiamata di sistema.
Per limitare l'intero spazio degli indirizzi del processo (ulimit -v
) usa LimitAS=
. Altrimenti per limitare il solo stack (ulimit -s
) usa LimitSTACK=
o segmento di dati (ulimit -d
) usa LimitDATA=
Secondo il setrlimit()
manpage, questi limiti causeranno il fallimento dell'allocazione di memoria aggiuntiva. STACK e AS termineranno il programma con un sigsegv se viene raggiunto il limite e lo stack deve crescere (e il programma non ha gestito questo).
Systemd supporta la limitazione dell'utilizzo della memoria tramite l'opzione MemoryLimit, come descritto in:https://www.freedesktop.org/software/systemd/man/systemd.resource-control.html
Il modo in cui il sistema gestisce la situazione quando la memoria massima consentita (per servizio) è esaurita dipende sia dall'implementazione sottostante di cgroups sia dal modo in cui systemd implementa il controllo delle risorse; Immagino che il processo verrebbe interrotto (tramite OOM killer).
Per limiti analoghi a ulimit:
man systemd.exec
...
LimitAS=(like ulimit -v)
...
LimitRSS=(like ulimit -m)
...