首页/系统/Linux 内核与性能调优速查/systemd 单元 CPU 资源控制
CPU 与调度60 条

systemd 单元 CPU 资源控制

systemd 通过 CPUQuota/CPUWeight/AllowedCPUs/TasksMax 等指令在单元级限制资源;set-property 即时生效并生成 drop-in 持久化。

systemd 资源控制

systemd 通过资源控制指令在单元级别限制资源:CPUQuota 限 CPU 带宽、CPUWeight 设相对权重、AllowedCPUs 限定可用核、TasksMax 限制任务数、MemoryMax 限制内存。systemctl set-property 修改后默认生成 drop-in 文件、重启后仍然生效,加 --runtime 则只对本次启动有效。查看实际生效值用 systemctl show 或 systemd-cgtop。systemd 的限额最终落在 cgroup 上,与内核接口是同一机制的两种表达。

基本信息

设置方式systemctl set-property 单元 指令=值
临时生效加 --runtime 参数
查看systemctl show 或 systemd-cgtop -m
常用指令CPUQuota、CPUWeight、AllowedCPUs、TasksMax、MemoryMax
落地位置对应的 cgroup 控制组文件

典型使用场景

  • 防止单个服务打满整机 CPU
  • 多服务部署时按重要性分配份额
  • 限制单元任务数,避免线程泄漏拖垮机器
  • 与容器编排的限额配合规划
  • 排查「设置了但看着没生效」的问题

设置与核对

设置与核对
systemctl set-property mysqld.service CPUQuota=200%
systemctl set-property mysqld.service CPUWeight=200
systemctl set-property mysqld.service TasksMax=4096
systemctl set-property --runtime mysqld.service CPUQuota=50%   # 仅本次启动有效
systemctl show mysqld.service -p CPUQuotaPerSecUSec -p CPUWeight
systemd-cgtop -m                     # 各控制组实时资源占用
systemctl cat mysqld.service         # 查看单元文件与已生成的 drop-in

常用指令读法

指令含义注意
CPUQuota=CPU 带宽上限,200% 表示两核额度按单核理解会少算一半
CPUWeight=相对权重只在竞争 CPU 时生效
AllowedCPUs=允许使用的核集合对应 cgroup 的 cpuset
TasksMax=单元内任务数上限与内核 threads-max 属于不同层次
CPUQuota=200% 表示两核额度,按单核理解会少算一半,常见于限额设错一倍的场景。
限制只对单元内进程生效:脱离单元派生出去的进程不受约束,需要额外的隔离手段。

与内核接口的对应

  • CPUQuota 落到 cgroup 的 cpu.max,内容为配额与周期两个数值
  • CPUWeight 落到 cpu.weight,默认值为 100
  • AllowedCPUs 落到 cpuset.cpus 与 cpuset.mems 两个文件
  • TasksMax 落到 pids.max,限制单元内的任务数量
  • 排查「设置没生效」时直接读对应的 cgroup 文件与 systemctl show 对照

设置未生效的排查

  • 先读 systemctl show 的对应属性,确认 systemd 已接受该值
  • 再读该单元对应的 cgroup 文件,确认数值确实落到内核层
  • 确认单元是否需要重启才能完整生效,部分属性修改后不会立即作用
  • 检查是否被更高层的 slice 限制覆盖,实际额度以更紧的一层为准

易错点

  • 把 CPUQuota=200% 当单核:额度算错一半,限额不是形同无就是过紧
  • 忘记 --runtime:以为只是试验,实际已生成持久化的 drop-in 文件
  • 只依赖 systemd 限制:逃逸出单元的进程完全不受约束
  • 与容器限额重复设置:两层限制叠加,实际额度以更紧的一层为准
  • 改完不验证:应读 systemctl show 与 cgroup 文件确认真实落地值

数据来源与参考

  • systemd.resource-control 手册
  • systemd-cgtop 手册
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌