Ubuntu 22.04系统下基于cgroup v2为用户账户配置CPU使用率限制的方法咨询
Ubuntu 22.04系统下基于cgroup v2为用户账户配置CPU使用率限制的方法咨询
嗨,我来帮你搞定Ubuntu 22.04 cgroup v2环境下的用户CPU限制配置——毕竟和CentOS 7的cgroup v1玩法确实不一样,咱们一步步来:
首先先确认你的系统确实是cgroup v2环境,执行这条命令验证:
stat -fc %T /sys/fs/cgroup/
如果输出是cgroup2fs,那就没问题,可以继续往下走。
临时配置(重启后失效,适合测试)
这种方式快速生效,用来验证配置逻辑很合适:
- 创建专属cgroup目录:分别为用户A和B创建对应的cgroup节点
sudo mkdir -p /sys/fs/cgroup/userA sudo mkdir -p /sys/fs/cgroup/userB - 设置CPU使用率限制:cgroup v2用
cpu.max文件来控制,格式是[最大占用值] [周期],默认周期是100000微秒(0.1秒)。100%CPU对应100000,200%对应200000# 给用户A限制100%CPU echo "100000 100000" | sudo tee /sys/fs/cgroup/userA/cpu.max # 给用户B限制200%CPU echo "200000 100000" | sudo tee /sys/fs/cgroup/userB/cpu.max - 将现有进程移入cgroup:把用户当前运行的所有进程放到对应的cgroup里
不过这种方式只能处理现有进程,用户后续新开的进程不会自动进入cgroup,适合临时测试用。# 用户A的进程移入userA cgroup sudo pgrep -u userA | sudo tee /sys/fs/cgroup/userA/cgroup.procs # 用户B的进程移入userB cgroup sudo pgrep -u userB | sudo tee /sys/fs/cgroup/userB/cgroup.procs
永久配置(开机生效,生产环境推荐)
Ubuntu 22.04用systemd管理cgroup v2,所以用systemd切片(slice)的方式最规范,能让用户所有进程(包括后续启动的)自动受限制:
- 创建systemd切片文件:
为用户A创建切片配置:
写入以下内容:sudo nano /etc/systemd/system/userA.slice
为用户B创建切片配置:[Unit] Description=CPU限制切片 - 用户A [Slice] CPUQuota=100%
写入以下内容:sudo nano /etc/systemd/system/userB.slice[Unit] Description=CPU限制切片 - 用户B [Slice] CPUQuota=200% - 让用户会话默认使用切片:
编辑用户A的bash配置文件,让其登录后自动使用userA.slice:
在末尾添加:nano ~userA/.bashrc
用户B同理:export SYSTEMD_SLICE=userA.slice
添加:nano ~userB/.bashrcexport SYSTEMD_SLICE=userB.slice - 重载配置并生效:
让用户重新登录,之后该用户启动的所有进程都会自动进入对应的切片,CPU限制会一直生效,哪怕重启系统也没问题。sudo systemctl daemon-reload
验证配置是否生效
可以用systemd-cgtop命令查看各个cgroup的CPU使用情况,或者直接查看cgroup的配置文件:
# 查看用户A的CPU限制 cat /sys/fs/cgroup/user.slice/userA.slice/cpu.max # 查看用户B的CPU限制 cat /sys/fs/cgroup/user.slice/userB.slice/cpu.max
备注:内容来源于stack exchange,提问作者15051810258139com
相关产品推荐
相关产品推荐

