Il ne semble pas y avoir de moyen officiellement soutenu de le faire. (C'est incorrect. Voir le bas)
Une manière officiellement découragée (car elle manipule le groupe de contrôle) est la suivante:
Faites le fichier suivant comme /etc/systemd/system/user@.service.d/set-memhigh.conf
[Service]
Type=simple
ExecStartPost=+/root/set-memoryhigh.sh %i
Créez ensuite le fichier suivant en tant que "/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
Vous pouvez voir si cela fonctionne ou non en exécutant
cat /sys/fs/cgroup/user.slice/user-${UID}.slice/memory.high
Si "/sys/fs/cgroup/user.slice" n'existe pas, la hiérarchie de groupe de contrôle unifiée n'est pas activée. Nous devons l'activer en tant que https://unix.stackexchange.com/a/452728/297666
Bien que cela fonctionne, je ne sais pas si vous aimez ça ...
Note ajoutée le 25 juillet: La création du fichier suivant comme /etc/systemd/system/user-1000.slice
pour chaque utilisateur (remplacement de 1000 par l'UID de l'utilisateur) impose une limitation de mémoire à cet utilisateur. Je l'ai vérifié sur systemd 237 sur ubuntu 18.04 et Debian strecth avec systemd 237 installé à partir de stretch-backports:
[Slice]
Slice=user.slice
MemoryHigh=24G
L'inconvénient est que nous devons créer le fichier ci-dessus pour chaque utilisateur. Avec systemd 239 , nous pouvons créer le fichier ci-dessus au fur /etc/systemd/system/user-.slice.d/memory.conf
et à mesure que la limitation de mémoire est imposée à chaque utilisateur. Mais il y a un bogue dans systemd 239 (ce bogue a été corrigé dans 240) et il ne fonctionne pas comme prévu. Pour contourner le bogue, créez le fichier suivant en tant que user-0.slice
et exécutez systemctl enable user-0.slice
. Nous n'avons pas à créer le fichier suivant pour chaque utilisateur.
[Unit]
Before=systemd-logind.service
[Slice]
Slice=user.slice
[Install]
WantedBy=multi-user.target