Linux-Dienste lassen sich seit Umstellung auf systemd mittels weniger (generischer) Konfigurationsanpassungen in den maximal nutzbaren Ressourcen (Memory, CPU, IO, …) limitieren. Möglich wird dies mittels cgroups. Nachfolgend sei dies am Beispiel einer Hauptspeicher-Limitierung des Apache-Dienstes auf einem Ubuntu 16.04 LTS System kurz demonstriert:
Das Apache2 Service erwartet seine systemd-Konfiguration(en) unter dem Namen „apache2.service“, dies ermitteln wir wie folgt:
root@nc:~# systemctl list-units --type=service --all | grep -i Apache apache2.service loaded active running LSB: Apache2 web server
Wir legen daher ein Verzeichnis mit nachfolgendem Namen an (Achtung: das „.d“ am Ende des Verzeichnis-Namens beachten), und darin eine Konfigurationsdatei mit beliebigem Namen und Datei-Endung „.conf“ in welchem wir das gewünschte Memory-Limit konfigurieren:
mkdir /etc/systemd/system/apache2.service.d vi /etc/systemd/system/apache2.service.d/limits.conf
[Service] MemoryLimit=1100M Restart=on-failure RestartSec=42
Die soeben erstellte Konfigurationsdatei lassen wir nun vom systemd neu einlesen und starten den Dienst Apache neu:
systemctl daemon-reload systemctl restart apache2
Eine Status-Abfrage zeigt nun folgende Veränderung:
root@nc:~# systemctl status apache2.service ● apache2.service - LSB: Apache2 web server Loaded: loaded (/etc/init.d/apache2; bad; vendor preset: enabled) Drop-In: /lib/systemd/system/apache2.service.d └─apache2-systemd.conf /etc/systemd/system/apache2.service.d └─limits.conf Active: active (running) since Di 2018-05-22 19:08:57 CEST; 2h 16min ago Docs: man:systemd-sysv-generator(8) Process: 26721 ExecStop=/etc/init.d/apache2 stop (code=exited, status=0/SUCCESS) Process: 26747 ExecStart=/etc/init.d/apache2 start (code=exited, status=0/SUCCESS) Tasks: 11 Memory: 240.3M (limit: 1.0G) ...
Das erstellte Konfigurations-AddOn in Form der limits.conf wurde verarbeitet, das Memory-Limit ist wirksam. Weitere konfigurierbare Limits findet man in den systemd-Manpages.