在 systemd 场景下的 CPU 限制方式


一、核心区别

项目 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=
直接写文件 推荐 可用

相关推荐
未济2 天前
linux 配置环境变量
linux
傲世仙尊2 天前
目录即文件-Ext文件系统收尾篇
linux·c语言
_艾伦 耶格尔.2 天前
进程间通信
linux
Liuqy-052 天前
Linux IO编程——静态库、动态库
linux
彧azz2 天前
Linux 环境下 Redis 学习总结:数据类型、持久化、锁、事务、主从与缓存问题
linux·redis·笔记·学习·面试
-梅2 天前
linux(8) 软硬链接
linux·运维·服务器
AIgorithmGEEK2 天前
[Linux]线程三部曲(上):一个执行流的诞生——从操作系统一路拆到 pthread_create
linux·线程·pid
琥珀色糖2 天前
SimlpeHttp
linux·服务器
qeen872 天前
【Linux】操作系统之进程介绍(二)
linux·笔记·学习·进程
Zenova EdgeOS2 天前
Linux ss 工业边缘网络分析实战
linux·python·边缘计算·工业网关