La página de manual para systemd.exec
tiene una lista de instrucciones LimitXXXX y una tabla útil que las compara con el ulimit
opciones, a través del setrlimit()
llamada al sistema.
Para limitar todo el espacio de direcciones del proceso (ulimit -v
) usa LimitAS=
. De lo contrario, para limitar solo la pila (ulimit -s
) usa LimitSTACK=
o segmento de datos (ulimit -d
) usa LimitDATA=
Según el setrlimit()
manual, estos límites harán que falle la asignación de memoria adicional. STACK y AS terminarán el programa con un sigsegv si se alcanza el límite y la pila necesita crecer (y el programa no manejó esto).
Systemd admite la limitación del uso de la memoria a través de la opción MemoryLimit, como se describe en:https://www.freedesktop.org/software/systemd/man/systemd.resource-control.html
La forma en que el sistema maneja la situación cuando se agota la memoria máxima permitida (por servicio) depende tanto de la implementación subyacente de cgroups como de la forma en que systemd implementa el control de recursos; Supongo que el proceso se eliminaría (a través del asesino OOM).
Para límites análogos a ulimit:
man systemd.exec
...
LimitAS=(like ulimit -v)
...
LimitRSS=(like ulimit -m)
...