配置 cgroups v2 以在用户之间公平共享资源

配置 cgroups v2 以在用户之间公平共享资源

有没有办法限制用户的系统资源?我知道过去存在一种方法,通过使用 cgred 服务和 /etc/cgconfig.conf 文件来强制用户的每个新生成的进程进入指定的 cgroup,如此处所述如何配置 cgroup 以在用户之间公平共享资源?

然而,这种方法似乎已被弃用,我发现的唯一方法是使用 systemctl set-property 实用程序在 /sys/fs/cgroup/user.slice/user-${UID}.slice 修改 cgroup 属性,问题是 systemd 仅在用户登录时创建此 cgroup,一旦用户注销,它就会被删除。我正在寻找一种方法来限制用户资源,即使他已注销。

答案1

我遇到了一个解决方案。

  1. 为每个用户创建切片配置文件:

    sudo mkdir /etc/systemd/system/user-<用户ID>。切片
    sudo touch /etc/systemd/system/user-<用户ID>.slice.d/override.conf

  2. 配置资源控制,例如:

    echo "[Slice]
    Slice=user.slice
    MemoryHigh=2G
    CPUWeight=20" |  sudo tee /etc/systemd/system/user-<uid>.slice.d/override.conf
    
  1. 应用更改:
    systemctl daemon-reload
    

您可以通过读取适当的用户切片 cgroup 属性来检查它是否有效,并检查它们是否与您选择的值匹配,例如:

cd /sys/fs/cgroup/user.slice/user-<uid>.slice
cat memory.low
cat cpu.weight

相关内容