You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 11:33:14