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

相关推荐
道清茗1 小时前
【RH294知识点汇总】第 9 章 《 自动执行 Linux 管理任务 》常见问题
linux·运维·服务器
山羊硬件Time1 小时前
自动化管理Linux的好工具:shell script
linux·嵌入式硬件·硬件工程师·基带工程·硬件开发
wj3055853782 小时前
Codex + Git 开发环境配置指南(WSL版)
linux·运维·git
星马梦缘3 小时前
如何切换window-ubuntu双系统【方案二】
linux·运维·ubuntu
丑八怪大丑4 小时前
Java网络编程
linux·服务器·网络
橙子也要努力变强4 小时前
信号捕捉底层机制-机理篇2
linux·服务器·c++
秋95 小时前
MySQL 8.0.46 全平台安装与配置详解(Windows/Linux/macOS)
linux·windows·mysql
小康小小涵5 小时前
基于ESP32S3实现无人机RID模块底层源码编译
linux·开发语言·python
CQU_JIAKE5 小时前
4.28~4.30【Q】
linux·运维·服务器