一、核心区别
| 项目 | cgroup v1 | cgroup v2 |
|---|---|---|
是否支持 CPUQuota= |
systemd 模拟 | 原生支持 |
| CPU 子系统 | 独立:cpu, cpuacct |
统一:cpu |
| 关键文件 | cpu.cfs_quota_us |
cpu.max |
| systemd 推荐方式 | set-property或 直接写文件 |
set-property |
| 是否全局 | system.slice | system.slice |
| 重启后是否失效 | 临时 | 临时 |
二、如何判断用的是 v1 还是 v2
stat -fc %T /sys/fs/cgroup
| 输出 | 含义 |
|---|---|
tmpfs |
cgroup v1 |
cgroup2fs |
cgroup v2 |
三、已有 systemd unit 临时限制 CPU
假设 unit 为:
xj.service
cgroup v1
方式 1:直接写 cgroup(最稳)
# 查看路径
systemctl show xj.service -p ControlGroup
# 设置 20%
echo 20000 | sudo tee /sys/fs/cgroup/cpu/system.slice/xj.service/cpu.cfs_quota_us
- 周期默认:
100000微秒 20000 / 100000 = 20%
立即生效, 重启 / 机器后失效
方式 2:systemctl(推荐)
sudo systemctl set-property xj.service CPUQuota=20%
⚠️ 前提:
CPUAccounting=yes
如果没开:
sudo systemctl set-property xj.service CPUAccounting=yes
sudo systemctl restart xj.service
取消限制
echo -1 | sudo tee /sys/fs/cgroup/cpu/system.slice/xj.service/cpu.cfs_quota_us
或:
sudo systemctl set-property xj.service CPUQuota=
cgroup v2
方式 1:systemctl( 官方推荐)
sudo systemctl set-property xj.service CPUQuota=20%
立即生效,不修改 unit 文件,重启后失效
方式 2:直接写 cgroup(高级)
cat /sys/fs/cgroup/system.slice/xj.service/cpu.max
设置为 20%:
echo "20000 100000" | sudo tee /sys/fs/cgroup/system.slice/xj.service/cpu.max
取消限制
sudo systemctl set-property xj.service CPUQuota=
或:
echo "max 100000" | sudo tee /sys/fs/cgroup/system.slice/xj.service/cpu.max
四、systemd 命令在 v1 / v2 下的行为差异
| systemd 命令 | cgroup v1 | cgroup v2 |
|---|---|---|
CPUQuota= |
systemd 转换 | 原生支持 |
CPUWeight= |
❌ | ✅ |
IOWeight= |
❌ | ✅ |
| 直接写文件 | 推荐 | 可用 |