GNU/Linux >> Tutoriels Linux >  >> Linux

Comment limiter la mémoire pour un service géré par systemd

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)
...

Linux
  1. Comment créer un service Systemd sous Linux

  2. Comment changer d'utilisateur pour un groupe de fichiers de service Systemd ?

  3. Comment empaqueter un service Systemd ?

  4. Comment rediriger la sortie du service systemd vers un fichier

  5. Comment arrêter le service systemd

Comment utiliser la commande Linux ulimit

Comment exécuter des conteneurs en tant que service Systemd avec Podman

Comment exécuter un script Shell en tant que service SystemD sous Linux

CentOS / RHEL 6 :Comment limiter les ressources mémoire pour un utilisateur spécifique à l'aide de cgroups

Limiter l'utilisation de la mémoire pour un seul processus Linux

Comment envoyer un email si un service systemd est redémarré ?