<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://www.xinux.net/index.php?action=history&amp;feed=atom&amp;title=Systemd_Baustein_Ressourcen</id>
	<title>Systemd Baustein Ressourcen - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://www.xinux.net/index.php?action=history&amp;feed=atom&amp;title=Systemd_Baustein_Ressourcen"/>
	<link rel="alternate" type="text/html" href="https://www.xinux.net/index.php?title=Systemd_Baustein_Ressourcen&amp;action=history"/>
	<updated>2026-10-21T13:46:10Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Xinux Wiki</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://www.xinux.net/index.php?title=Systemd_Baustein_Ressourcen&amp;diff=73777&amp;oldid=prev</id>
		<title>Thomas.will: Neue Seite: Baustein Ressourcen und cgroups</title>
		<link rel="alternate" type="text/html" href="https://www.xinux.net/index.php?title=Systemd_Baustein_Ressourcen&amp;diff=73777&amp;oldid=prev"/>
		<updated>2026-10-17T15:47:31Z</updated>

		<summary type="html">&lt;p&gt;Neue Seite: Baustein Ressourcen und cgroups&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Kategorie:systemd]]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Baustein !! ab Stufe !! Lernpfad&lt;br /&gt;
|-&lt;br /&gt;
| '''Ressourcen und cgroups''' || [[Systemd Stufe 2 Fortgeschritten|Stufe 2]] || [[Systemd Lernpfad|Übersicht]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Einfach erklärt=&lt;br /&gt;
*Jeder Dienst steckt in einer eigenen '''cgroup''' (Control Group). Das ist eine Schublade des Kernels für Prozesse.&lt;br /&gt;
*Über diese Schublade weiß systemd immer, welche Prozesse zu welchem Dienst gehören, auch wenn sie sich vervielfältigen.&lt;br /&gt;
*Für jede Schublade kann man '''Grenzen''' setzen: höchstens so viel Speicher, so viel CPU, so viele Prozesse.&lt;br /&gt;
*Schubladen werden in '''Slices''' gruppiert. Grenzen an einer Slice gelten für alles darin zusammen.&lt;br /&gt;
&lt;br /&gt;
=Der Baum=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-.slice                     die Wurzel&lt;br /&gt;
├─ system.slice             alle Dienste&lt;br /&gt;
│  ├─ ssh.service&lt;br /&gt;
│  └─ cron.service&lt;br /&gt;
├─ user.slice               alle angemeldeten Benutzer&lt;br /&gt;
│  └─ user-1000.slice&lt;br /&gt;
│     └─ session-2.scope&lt;br /&gt;
└─ machine.slice            Container und VMs, siehe [[Systemd Baustein Container]]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*'''Service''': von systemd gestartet. '''Scope''': Prozesse, die schon laufen und nur einsortiert werden, z.B. eine Anmeldung.&lt;br /&gt;
&lt;br /&gt;
=Anzeigen=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Befehl !! Wirkung&lt;br /&gt;
|-&lt;br /&gt;
| systemd-cgls || der ganze Baum mit allen Prozessen&lt;br /&gt;
|-&lt;br /&gt;
| systemd-cgls -u ssh.service || nur ein Dienst&lt;br /&gt;
|-&lt;br /&gt;
| systemd-cgtop || wie top, aber pro cgroup: CPU, Speicher, Prozesse&lt;br /&gt;
|-&lt;br /&gt;
| systemctl status ssh || im Abschnitt CGroup stehen alle Prozesse des Dienstes&lt;br /&gt;
|-&lt;br /&gt;
| systemctl show ssh -p MemoryCurrent -p CPUUsageNSec -p TasksCurrent || Verbrauch eines Dienstes als Zahl&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Grenzen setzen=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Option !! Wirkung&lt;br /&gt;
|-&lt;br /&gt;
| MemoryMax=500M || harte Grenze. Darüber beendet der Kernel Prozesse des Dienstes (OOM)&lt;br /&gt;
|-&lt;br /&gt;
| MemoryHigh=400M || weiche Grenze. Darüber wird der Dienst gebremst&lt;br /&gt;
|-&lt;br /&gt;
| CPUQuota=30% || höchstens 30 % eines CPU-Kerns, 200 % = zwei Kerne&lt;br /&gt;
|-&lt;br /&gt;
| CPUWeight=50 || Anteil, wenn es eng wird. Standard 100, weniger = bescheidener&lt;br /&gt;
|-&lt;br /&gt;
| TasksMax=100 || höchstens 100 Prozesse und Threads, schützt vor Fork-Bomben&lt;br /&gt;
|-&lt;br /&gt;
| IOWeight=50 || Anteil an der Platte, wenn es eng wird&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==In der Unit==&lt;br /&gt;
*systemctl edit dienst&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Service]&lt;br /&gt;
MemoryMax=500M&lt;br /&gt;
CPUQuota=30%&lt;br /&gt;
TasksMax=100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Im laufenden Betrieb==&lt;br /&gt;
*systemctl set-property dienst CPUQuota=30%&lt;br /&gt;
*Wirkt sofort und bleibt nach dem Neustart. Die Datei landet unter '''/etc/systemd/system.control/''', die bearbeitet man nicht von Hand.&lt;br /&gt;
*Nur bis zum Neustart: '''systemctl set-property --runtime dienst CPUQuota=30%'''&lt;br /&gt;
&lt;br /&gt;
==Eine eigene Slice==&lt;br /&gt;
*/etc/systemd/system/batch.slice&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Slice]&lt;br /&gt;
CPUQuota=50%&lt;br /&gt;
MemoryMax=1G&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Dienste einsortieren: '''Slice=batch.slice''' im [Service]-Teil. Alle Dienste darin teilen sich zusammen 50 % CPU und 1 GB.&lt;br /&gt;
&lt;br /&gt;
==Einen Befehl begrenzt starten==&lt;br /&gt;
*systemd-run --scope -p CPUQuota=20% -p MemoryMax=200M ./rechnen.sh&lt;br /&gt;
*Gut zum Ausprobieren: Man sieht sofort in systemd-cgtop, wie die Grenze wirkt.&lt;br /&gt;
&lt;br /&gt;
=Beispiel: Last erzeugen und bremsen=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
systemd-run --unit=last -p CPUQuota=100% /usr/bin/sha256sum /dev/zero&lt;br /&gt;
systemd-cgtop&lt;br /&gt;
systemctl set-property --runtime last.service CPUQuota=20%&lt;br /&gt;
systemd-cgtop&lt;br /&gt;
systemctl stop last.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*In systemd-cgtop fällt die CPU von last.service von 100 % auf 20 %.&lt;br /&gt;
&lt;br /&gt;
=Stolperfallen=&lt;br /&gt;
*'''MemoryMax= zu klein:''' Der Dienst wird vom Kernel beendet. Im Journal steht ''A process of this unit has been killed by the OOM killer''.&lt;br /&gt;
*'''CPUQuota=''' gilt pro Kern. 100 % ist ein ganzer Kern, nicht die ganze Maschine.&lt;br /&gt;
*'''set-property''' ändert Dateien unter /etc/systemd/system.control/. Wer dort nicht nachschaut, sucht die Einstellung lange.&lt;br /&gt;
*'''cgroup v1 und v2:''' Debian 13 und Rocky 9 nutzen nur noch v2. Alte Anleitungen mit MemoryLimit= oder CPUShares= gelten nicht mehr: heute '''MemoryMax=''' und '''CPUWeight='''.&lt;br /&gt;
&lt;br /&gt;
=Aufgaben=&lt;br /&gt;
==Grundaufgaben==&lt;br /&gt;
#Lassen Sie sich mit systemd-cgls den Baum anzeigen. In welcher Slice liegt Ihre Anmeldung?&lt;br /&gt;
#Beobachten Sie mit systemd-cgtop, welcher Dienst gerade am meisten CPU braucht.&lt;br /&gt;
#Erzeugen Sie Last mit systemd-run und bremsen Sie sie mit set-property auf 20 %.&lt;br /&gt;
#Begrenzen Sie einen Dienst per systemctl edit auf 100 Prozesse.&lt;br /&gt;
==Für Schnelle==&lt;br /&gt;
#Legen Sie eine eigene Slice an und sortieren Sie zwei Last-Dienste hinein. Wie teilen sie sich die CPU?&lt;br /&gt;
#Setzen Sie MemoryMax=50M für einen Dienst, der mehr braucht. Was steht im Journal?&lt;br /&gt;
#Wo hat set-property seine Datei abgelegt?&lt;br /&gt;
&lt;br /&gt;
=Weiter=&lt;br /&gt;
*[[Systemd Lernpfad|Übersicht: Lernpfad systemd]]&lt;br /&gt;
*Alte Seiten: [[Systemd.slice]] · [[Systemd.resource-control]] · [[Systemd cgroups Eigener Slice]] · [[Systemd cgroups Nutzen von systemctl set-property]] · [[Systemd cgroups Servicedateien bearbeiten]] · [[Systemd cgroups Verwendung von Drop-in-Dateien]]&lt;/div&gt;</summary>
		<author><name>Thomas.will</name></author>
	</entry>
</feed>