我在共享系统上设置了 cgroup,将某个组的 cpu 访问限制为 25%,但它似乎不起作用。以下是遵循的步骤:
将此行添加到
/etc/cgrules.conf
:@guest_users cpu lowcpu
在上面的记录中,@guest_users
是我想要限制其成员 cpu 使用率的 Linux 组,cpu
是控制器,lowcpu
是配置 cgroup 的句柄,如下一步所示。
将以下行添加到
/etc/cgconfig.conf
:group lowcpu{ cpu{ cpu.shares=256; } }
使用启用并重新启动
cgred
和服务。cgconfig
systemctl
我运行的是CentOS系统7.5,内核3.10,32核。
我确实看到目录/sys/fs/cgroup/cpu/lowcpu
已创建,并且文件cpu.shares
中有第 256 行。
尽管如此,我发现top
guest_users 组中的用户仍然能够使 cpu 过载。关于可能的原因和调试问题的途径有什么建议吗?
答案1
这个答案在堆栈溢出帮助了。我发现cpu.shares
只有当 cgroup 和系统进程之间存在 CPU 争用时,内核才会启动该规则。如果没有争用,所有CPU资源都可以被cgroup使用。将以下行添加到 cpu 部分就可以了:
cpu.cfs_period_us=1000000;
cpu.cfs_quota_us=800000;
上述几行的效果是,每 1 秒的 cpu 都会为 cgroup 进程分配 0.8 秒的时间片。
要验证 cgroup 是否已创建且处于活动状态,命令systemd-cgls
和systemd-cgtop
很有用。