Systemd cgroups Servicedateien bearbeiten: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(11 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 5: Zeile 5:
 
*/etc/systemd/system/generate-load.service
 
*/etc/systemd/system/generate-load.service
 
<pre>
 
<pre>
 +
[Unit]
 +
Description=Simple Unit
 +
 
[Service]
 
[Service]
 
Type=oneshot
 
Type=oneshot
Zeile 15: Zeile 18:
 
WantedBy=multi-user.target
 
WantedBy=multi-user.target
 
</pre>
 
</pre>
 +
 
=Das Skript=
 
=Das Skript=
 
*cat /usr/local/bin/generate_load.sh
 
*cat /usr/local/bin/generate_load.sh
 
  #!/bin/bash
 
  #!/bin/bash
 
  /usr/bin/cat /dev/urandom > /dev/null &
 
  /usr/bin/cat /dev/urandom > /dev/null &
 +
*chmod +x /usr/local/bin/generate_load.sh
  
 
=Starten des Dienstes=
 
=Starten des Dienstes=
*systemcl start generate-load.service
+
*systemctl start generate-load.service
 +
==systemd-cgls==
 
*systemd-cgls
 
*systemd-cgls
 
<pre>
 
<pre>
Zeile 43: Zeile 49:
 
...  
 
...  
 
</pre>
 
</pre>
=Eigener Slice=
+
==systemd-cgtop==
*Was passiert, wenn ich der systemd-Dienstdatei die folgende Zeile hinzufüge?
+
*systemd-cgtop
Slice=my-beautiful.slice
+
[[Datei:Systemd-cgtop.png|700px]]
*Die Ausgabe von systemd-cgls zeigt etwas Merkwürdiges. Der generate-load.service ist nun tief verschachtelt:
+
=Beschränkung=
*systemd-cgls
+
[Service]
<pre>
+
...
Control group /:
+
MemoryMax=100M
-.slice
+
CPUQuota=30%
├─my.slice
+
 
│ └─my-beautiful.slice
+
 
│  └─my-beautiful.slice
+
 
│    └─generate-load.service
+
==systemd-cgtop==
│      └─53737 /usr/bin/cat /dev/urandom
+
*systemd-cgtop
</pre>
+
[[Datei:Systemd-cgtop1.png|700px]]
*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:
 

Aktuelle Version vom 18. Januar 2023, 12:21 Uhr

ToDo

  • 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
[Unit]
Description=Simple Unit

[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 &
  • chmod +x /usr/local/bin/generate_load.sh

Starten des Dienstes

  • systemctl start generate-load.service

systemd-cgls

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

systemd-cgtop

  • systemd-cgtop

Systemd-cgtop.png

Beschränkung

[Service]
...
MemoryMax=100M
CPUQuota=30%


systemd-cgtop

  • systemd-cgtop

Systemd-cgtop1.png