Ubuntu 22.04 cgroup v2环境下按用户账户限制CPU使用率的配置方法咨询
Ubuntu 22.04 cgroup v2环境下按用户账户限制CPU使用率的配置方法咨询
你好!在CentOS 7的cgroup v1里用cgconfig.conf和cgrules.conf的配置方式确实和cgroup v2差异很大,Ubuntu 22.04默认启用cgroup v2且依赖systemd管理,下面我给你两种可行的配置方案,推荐用第一种systemd原生方式,更稳定适配系统:
方案一:利用systemd Slice实现持久化限制
systemd的slice机制是cgroup v2的原生管理方式,能自动把用户的所有进程(包括后续启动的)纳入限制,步骤如下:
1. 创建用户专属的Slice配置文件
- 针对用户A(限制10% CPU),创建配置文件
/etc/systemd/system/user-A.slice,写入以下内容:
[Unit] Description=CPU限制为10%的用户A专属Slice [Slice] CPUQuota=10%
- 针对用户B(限制20% CPU),创建配置文件
/etc/systemd/system/user-B.slice,修改CPUQuota值:
[Unit] Description=CPU限制为20%的用户B专属Slice [Slice] CPUQuota=20%
2. 加载新配置并应用到用户会话
- 重新加载systemd配置:
sudo systemctl daemon-reload
- 让已登录的用户切换到新Slice(以用户A为例):
sudo loginctl set-user-slice A user-A.slice
- 最后让用户重新登录,后续所有进程都会自动继承这个CPU限制;如果是新用户,配置后首次登录就会生效。
方案二:直接操作cgroupfs(适合临时测试或自定义场景)
如果不想依赖systemd,也可以直接操作cgroup文件系统,但要注意systemd可能会干扰这个配置,步骤如下:
1. 创建cgroup目录并设置CPU限制
- 为用户A创建cgroup目录:
sudo mkdir -p /sys/fs/cgroup/user-A
- 设置10% CPU限制(
cpu.max格式为max period,period默认1000000微秒,10%对应max=100000):
echo 100000 > /sys/fs/cgroup/user-A/cpu.max
- 同理为用户B创建目录并设置20%限制:
sudo mkdir -p /sys/fs/cgroup/user-B echo 200000 > /sys/fs/cgroup/user-B/cpu.max
2. 迁移现有进程并设置自动加入
- 把用户A的所有现有进程移入cgroup:
for pid in $(pgrep -u A); do sudo echo $pid > /sys/fs/cgroup/user-A/cgroup.procs; done
- 让用户A后续启动的进程自动进入该cgroup,编辑其
~A/.bashrc(如果用zsh则编辑~A/.zshrc),加入:
echo $$ > /sys/fs/cgroup/user-A/cgroup.procs
- 用户B做同样的操作,替换对应的cgroup路径即可。
注意事项
CPUQuota是相对于单个CPU核心的,比如4核系统中10%的限制意味着最多使用0.4个核心的算力,和cgroup v1的逻辑一致。- 方案一的systemd方式是Ubuntu官方推荐的,配置会随系统启动自动生效,且不会被systemd的其他操作覆盖;方案二更灵活但需要自己维护持久化逻辑。
备注:内容来源于stack exchange,提问作者15051810258139com
相关产品推荐
相关产品推荐

