Es scheint keinen offiziell unterstützten Weg zu geben, dies zu tun. (Dies ist falsch. Siehe unten)
Ein offiziell entmutigter Weg (weil er die cgroup manipuliert) ist wie folgt:
Machen Sie die folgende Datei als /etc/systemd/system/user@.service.d/set-memhigh.conf
[Service]
Type=simple
ExecStartPost=+/root/set-memoryhigh.sh %i
Erstellen Sie dann die folgende Datei als "/root/set-memoryhigh.sh".
#!/bin/bash
exec >>/var/tmp/log.txt 2>&1 # for logging
set -x # for logging
for d in /sys/fs/cgroup /sys/fs/cgroup/user.slice /sys/fs/cgroup/user.slice/user-$1.slice; do
echo "+memory" >>${d}/cgroup.subtree_control
done
/bin/echo "24G" >> /sys/fs/cgroup/user.slice/user-$1.slice/memory.high
Sie können sehen, ob es funktioniert oder nicht, indem Sie ausführen
cat /sys/fs/cgroup/user.slice/user-${UID}.slice/memory.high
Wenn "/sys/fs/cgroup/user.slice" nicht vorhanden ist, ist die einheitliche cgroup-Hierarchie nicht aktiviert. Wir müssen es als /unix//a/452728/297666 aktivieren
Obwohl es funktioniert, bin ich mir nicht sicher, ob Ihnen das gefällt ...
Hinweis hinzugefügt am 25. Juli: Wenn Sie die folgende Datei /etc/systemd/system/user-1000.slice
für jeden Benutzer erstellen (1000 durch die UID des Benutzers ersetzen), wird diesem Benutzer eine Speicherbeschränkung auferlegt. Ich habe es auf systemd 237 unter ubuntu 18.04 und Debian strecth mit systemd 237 überprüft, das von Stretch-Backports installiert wurde:
[Slice]
Slice=user.slice
MemoryHigh=24G
Die Unannehmlichkeit ist, dass wir die obige Datei für jeden Benutzer erstellen müssen . Mit systemd 239 können wir die obige Datei als erstellen /etc/systemd/system/user-.slice.d/memory.conf
und die Speicherbeschränkung wird jedem Benutzer auferlegt. Es gibt jedoch einen Fehler in systemd 239 (dieser Fehler wurde in 240 behoben) und er funktioniert nicht wie beabsichtigt. Um den Fehler zu umgehen, erstellen Sie die folgende Datei als user-0.slice
und führen Sie sie aus systemctl enable user-0.slice
. Wir müssen nicht für jeden Benutzer die folgende Datei erstellen.
[Unit]
Before=systemd-logind.service
[Slice]
Slice=user.slice
[Install]
WantedBy=multi-user.target