-
验证系统使用 cgroup v2:
$ mount | grep cgroup2 cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime,nsdelegate,memory_recursiveprot)
-
创建 cgroup:
# 创建名为 limited_memory 的 cgroup sudo mkdir /sys/fs/cgroup/limited_memory
-
设置内存限制:
# 限制内存用量为 2GB echo $((2 * 2 ** 30)) | sudo tee /sys/fs/cgroup/limited_memory/memory.max
-
将用户进程加入 cgroup:
# 将 USER 的所有进程加入 cgroup for pid in $(pgrep -u USER); doecho $pid | sudo tee /sys/fs/cgroup/limited_memory/cgroup.procs done
-
验证配置:
# 检查 cgroup 中的进程 cat /sys/fs/cgroup/limited_memory/cgroup.procs
持久化
为了确保新进程也受到限制,可以在用户登录时自动将其加入到指定的 cgroup。这里通过创建一个用户服务来实现:
-
编辑单元文件:
vim ~/.config/systemd/user/cgroup.service
[Unit] Description=Move user session to cgroup[Service] ExecStart=/usr/bin/bash -c "echo $$ > /sys/fs/cgroup/limited_memory/cgroup.procs"[Install] WantedBy=default.target
-
重载单元文件:
systemctl --user daemon-reload
-
启动服务:
systemctl --user enable cgroup systemctl --user start cgroup
-
检查服务状态:
systemctl --user status cgroup
反持久化
sudo rmdir /sys/fs/cgroup/limited_memory
参考:Controlling Process Resources with Linux Control Groups | iximiuz Labs