有没有办法限制用户的系统资源?我知道过去存在一种方法,通过使用 cgred 服务和 /etc/cgconfig.conf 文件来强制用户的每个新生成的进程进入指定的 cgroup,如此处所述如何配置 cgroup 以在用户之间公平共享资源?。
然而,这种方法似乎已被弃用,我发现的唯一方法是使用 systemctl set-property 实用程序在 /sys/fs/cgroup/user.slice/user-${UID}.slice 修改 cgroup 属性,问题是 systemd 仅在用户登录时创建此 cgroup,一旦用户注销,它就会被删除。我正在寻找一种方法来限制用户资源,即使他已注销。
答案1
我遇到了一个解决方案。
为每个用户创建切片配置文件:
sudo mkdir /etc/systemd/system/user-<用户ID>。切片 sudo touch /etc/systemd/system/user-<用户ID>.slice.d/override.conf
配置资源控制,例如:
echo "[Slice] Slice=user.slice MemoryHigh=2G CPUWeight=20" | sudo tee /etc/systemd/system/user-<uid>.slice.d/override.conf
- 应用更改:
systemctl daemon-reload
您可以通过读取适当的用户切片 cgroup 属性来检查它是否有效,并检查它们是否与您选择的值匹配,例如:
cd /sys/fs/cgroup/user.slice/user-<uid>.slice
cat memory.low
cat cpu.weight