Dường như không có cách hỗ trợ chính thức để làm điều đó. (Điều này không chính xác. Xem phía dưới)
Một cách chính thức được khuyến khích (vì nó thao túng nhóm) như sau:
Tạo các tập tin sau như /etc/systemd/system/user@.service.d/set-memhigh.conf
[Service]
Type=simple
ExecStartPost=+/root/set-memoryhigh.sh %i
Sau đó tạo tệp sau đây là "/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
Bạn có thể xem nó có hoạt động hay không bằng cách chạy
cat /sys/fs/cgroup/user.slice/user-${UID}.slice/memory.high
Nếu "/sys/fs/cgroup/user.slice" không tồn tại, thì hệ thống phân cấp cgroup hợp nhất không được bật. Chúng tôi phải kích hoạt nó dưới dạng https://unix.stackexchange.com/a/452728/297666
Mặc dù nó hoạt động, tôi không chắc bạn có thích điều này không ...
Lưu ý được thêm vào ngày 25 tháng 7: Tạo tệp sau đây /etc/systemd/system/user-1000.slice
cho mỗi người dùng (thay thế 1000 bằng UID của người dùng) áp đặt giới hạn bộ nhớ cho người dùng đó. Tôi đã xác minh nó trên systemd 237 trên ubfox 18.04 và Debian strecth với systemd 237 được cài đặt từ các bản sao lưu kéo dài:
[Slice]
Slice=user.slice
MemoryHigh=24G
Sự bất tiện là chúng tôi phải tạo tệp trên cho mỗi người dùng. Với systemd 239 , chúng ta có thể tạo tập tin trên /etc/systemd/system/user-.slice.d/memory.conf
và giới hạn bộ nhớ được áp dụng cho mọi người dùng. Nhưng có một lỗi trong systemd 239 (lỗi này đã được sửa trong 240) và nó không hoạt động như dự định. Để khắc phục lỗi, tạo tệp sau user-0.slice
và chạy systemctl enable user-0.slice
. Chúng tôi không phải tạo tệp sau cho mỗi người dùng.
[Unit]
Before=systemd-logind.service
[Slice]
Slice=user.slice
[Install]
WantedBy=multi-user.target