Tampaknya tidak ada cara yang didukung secara resmi untuk melakukan itu. (Ini salah. Lihat bagian bawah)
Cara yang secara resmi tidak disarankan (karena memanipulasi cgroup) adalah sebagai berikut:
Jadikan file berikut sebagai /etc/systemd/system/user@.service.d/set-memhigh.conf
[Service]
Type=simple
ExecStartPost=+/root/set-memoryhigh.sh %i
Kemudian buat file berikut ini sebagai "/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
Anda dapat melihat apakah itu berfungsi atau tidak dengan menjalankan
cat /sys/fs/cgroup/user.slice/user-${UID}.slice/memory.high
Jika "/sys/fs/cgroup/user.slice" tidak ada, maka hierarki cgroup terpadu tidak diaktifkan. Kami harus mengaktifkannya sebagai https://unix.stackexchange.com/a/452728/297666
Meskipun berfungsi, saya tidak yakin apakah Anda suka ini ...
Catatan ditambahkan pada 25 Juli: Membuat file berikut /etc/systemd/system/user-1000.slice
untuk setiap pengguna (mengganti 1000 dengan UID pengguna) membebankan batasan memori pada pengguna itu. Saya memverifikasinya di systemd 237 di ubuntu 18.04 dan Debian strecth dengan systemd 237 diinstal dari stretch-backports:
[Slice]
Slice=user.slice
MemoryHigh=24G
Ketidaknyamanannya adalah kita harus membuat file di atas untuk setiap pengguna. Dengan systemd 239 , kita dapat membuat file di atas /etc/systemd/system/user-.slice.d/memory.conf
dan batasan memori dikenakan pada setiap pengguna. Tetapi ada bug di systemd 239 (bug ini diperbaiki pada 240) dan tidak berfungsi sebagaimana dimaksud. Untuk mengatasi bug, buat file berikut sebagai user-0.slice
dan jalankan systemctl enable user-0.slice
. Kami tidak harus membuat file berikut untuk setiap pengguna.
[Unit]
Before=systemd-logind.service
[Slice]
Slice=user.slice
[Install]
WantedBy=multi-user.target