Ich habe mich registriert, weil ich es nicht geschafft habe, cgroups mit den verschiedenen Tutorials/Kommentaren/was auch immer man bei Google findet, zu betreiben. Ich möchte die Menge an RAM begrenzen, die ein bestimmter Benutzer verwenden darf. Im Internet steht „cgroups“. Auf meinem Testserver läuft Ubuntu 14.04. Man kann die erwähnten Tutorials in zwei Kategorien unterteilen. Direktes Festlegen von Limits mit Echo und Verwenden einer bestimmten Konfiguration. Beides funktioniert bei mir nicht.
Festlegen von Grenzwerten mit Echo
cgcreate -g cpu,cpuacct,...:/my_group
beendet sich ohne Benachrichtigung. Wenn ich versuche,
echo 100M > memory.limit_in_bytes
es heißt nur „nicht zulässig“, selbst wenn ich sudo verwende. Ich komme nicht einmal dazu, einen anderen Benutzer einzuschränken.
Festlegen von Grenzwerten mithilfe der Konfiguration
Ich habe von zwei Konfigurationsdateien gelesen. Hier sind also meine Konfigurationsdateien:
cgconfig.conf
mount {
memory = /cgroup/memory;
}
group limit_grp {
memory {
memory.limit_in_bytes=100M;
memory.memsw.limit_in_bytes=125M;
}
}
cgrules.conf
testuser memory limit_grp
Wenn ich laufe
cgconfigparser -l /etc/cgconfig.conf
es wird in systemd gemountet. Jetzt melde ich mich mit Testuser an, führe eine speicherintensive Aufgabe aus – und es läuft, ohne sich um mein Limit zu kümmern.
Ich habe versucht, neu zu starten, aber nichts hat sich geändert. Sogar einige seltsame Versuche mit der Kernelkonfiguration haben nicht funktioniert. Ich bin neu bei cgroups und hätte nicht gedacht, dass es so kompliziert ist. Ich würde mich über Vorschläge zu meinem Thema freuen. Vielen Dank im Voraus!
Antwort1
Der Grund für dieses Verhalten liegt wahrscheinlich darin, dass Ihrer Anmeldesitzung bereits eine Speichergrenzwertgruppe zugeordnet ist und der Prozess diese gemäß der Systemd-Konfiguration erbt.
Überprüfen Sie die Kontrollgruppe Ihrer laufenden Prozesse mit:
cat /proc/pid/cgroup
... und Sie sehen möglicherweise etwas wie:
13:name=systemd:/user/0.user/2.session
12:debug:/
11:pids:/
10:net_prio:/user/0.user/2.session
9:perf_event:/user/0.user/2.session
8:net_cls:/user/0.user/2.session
7:freezer:/user/0.user/2.session
6:devices:/user/0.user/2.session
5:memory:/user/0.user/2.session
4:blkio:/user/0.user/2.session
3:cpuacct:/user/0.user/2.session
2:cpu:/
1:cpuset:/
Vorausgesetzt, Sie möchten dieses Verhalten nicht, können Sie Ihre benutzerdefinierte Kontrollgruppe mit Speichercontroller verwenden, indem Sie sie bearbeiten /etc/systemd/logind.conf
und memory
aus der Controllers
Zeile entfernen.
Antwort2
Ich hatte ein ähnliches Problem (allerdings unter Fedora 29): Es schien, als ob mein /etc/cgconfig.conf
komplett ignoriert wurde.
sudo systemctl enable cgconfig
und ein Neustart hat das Problem gelöst.