Cgroups with systemd: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Zeile 51: Zeile 51:
 
...  
 
...  
 
</pre>
 
</pre>
 +
=Eigner Slice=
 +
*Was passiert, wenn ich der systemd-Dienstdatei die folgende Zeile hinzufüge?
 +
Slice=my-beautiful.slice
 +
*Die Ausgabe von systemd-cgls zeigt etwas Merkwürdiges. Der generate-load.service ist nun tief verschachtelt:
 +
*systemd-cgls
 +
<pre>
 +
Control group /:
 +
-.slice
 +
├─my.slice
 +
│ └─my-beautiful.slice
 +
│  └─my-beautiful.slice
 +
│    └─generate-load.service
 +
│      └─53737 /usr/bin/cat /dev/urandom
 +
</pre>
 +
*Warum ist das? Die Antwort hat damit zu tun, wie systemd verschachtelte cgroups interpretiert.
 +
*Kinder werden folgendermaßen deklariert: -.slice. Da systemd versucht, hilfreich zu sein, wenn ein übergeordnetes Element nicht existiert, erstellt systemd es für Sie.
 +
*Wenn ich Unterstriche _ anstelle von Bindestrichen verwendet hätte, wäre das Ergebnis so gewesen, wie Sie es erwartet hätten:
  
 
=Verwendung von Drop-in-Dateien=
 
=Verwendung von Drop-in-Dateien=

Version vom 11. Januar 2023, 13:48 Uhr

  • Standardmäßig erstellt systemd eine neue cgroup unter system.slice für jeden Dienst, den es überwacht.
  • Das ausführen von systemd-cgls zeigt die folgenden Dienste unter system.slice (die Ausgabe ist der Kürze halber abgeschnitten):
  • Sie können dieses Verhalten ändern, indem Sie die systemd-Dienstdatei bearbeiten.
  • Es gibt drei Optionen in Bezug auf die cgroup-Verwaltung mit systemd:
    • Bearbeiten der Servicedatei selbst.
    • Verwendung von Drop-in-Dateien.
    • Verwenden von systemctl set-property-Befehlen, die mit dem manuellen Bearbeiten der Dateien identisch sind, aber systemctl erstellt die erforderlichen Einträge für Sie.

Auf diese gehe ich weiter unten näher ein.

Servicedateien bearbeiten

  • Lassen Sie uns die Unit-Datei selbst bearbeiten.
  • Dazu habe ich eine sehr einfache Unit-Datei erstellt, die ein Skript ausführt:

Unit Datei

  • /etc/systemd/system/generate-load.service
[Service]
Type=oneshot
ExecStart=/usr/local/bin/generate_load.sh
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Das Skript

  • cat /usr/local/bin/generate_load.sh
#!/bin/bash
/usr/bin/cat /dev/urandom > /dev/null &

Starten des Dienstes

  • systemcl start generate-load.service
  • systemd-cgls
Control group /:
...
└─system.slice 
  ├─prog.service 
  │ └─47462 netcat -lp 99 -s 127.0.0.1
  ├─systemd-udevd.service 
  │ └─212 /lib/systemd/systemd-udevd
  ├─cron.service 
  │ └─296 /usr/sbin/cron -f
  ├─systemd-journald.service 
  │ └─192 /lib/systemd/systemd-journald
  ├─ssh.service 
  │ └─410 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
  ├─rsyslog.service 
  │ └─303 /usr/sbin/rsyslogd -n -iNONE
  ├─generate-load.service 
  │ └─50387 /usr/bin/cat /dev/urandom
... 

Eigner Slice

  • Was passiert, wenn ich der systemd-Dienstdatei die folgende Zeile hinzufüge?
Slice=my-beautiful.slice
  • Die Ausgabe von systemd-cgls zeigt etwas Merkwürdiges. Der generate-load.service ist nun tief verschachtelt:
  • systemd-cgls
Control group /:
-.slice
├─my.slice 
│ └─my-beautiful.slice 
│   └─my-beautiful.slice 
│     └─generate-load.service 
│       └─53737 /usr/bin/cat /dev/urandom
  • Warum ist das? Die Antwort hat damit zu tun, wie systemd verschachtelte cgroups interpretiert.
  • Kinder werden folgendermaßen deklariert: -.slice. Da systemd versucht, hilfreich zu sein, wenn ein übergeordnetes Element nicht existiert, erstellt systemd es für Sie.
  • Wenn ich Unterstriche _ anstelle von Bindestrichen verwendet hätte, wäre das Ergebnis so gewesen, wie Sie es erwartet hätten:

Verwendung von Drop-in-Dateien

  • Drop-in-Dateien für systemd sind ziemlich einfach einzurichten.
  • Erstellen Sie zunächst ein geeignetes Verzeichnis basierend auf dem Namen Ihres Dienstes in /etc/systemd/system.
  • Führen Sie im cat-Beispiel den folgenden Befehl aus:
  • mkdir -p /etc/systemd/system/prog.service.d/
  • Diese Dateien können beliebig organisiert werden.
  • Sie werden basierend auf der numerischen Reihenfolge ausgeführt, daher sollten Sie Ihre Konfigurationsdateien etwa 10-CPUSettings.conf benennen.
  • Alle Dateien in diesem Verzeichnis sollten die Dateierweiterung .conf haben und erfordern, dass Sie jedes Mal, wenn Sie eine dieser Dateien anpassen, systemctl daemon-reload ausführen.
  • Ich habe zwei Drop-In-Dateien erstellt, um zu zeigen, wie Sie verschiedene Konfigurationen aufteilen können.
  • Die erste ist 00-slice.conf. Wie unten zu sehen ist, richtet es die Standardoptionen für ein separates Slice für den cat-Dienst ein: