0

0

LinuxCPU资源隔离_cgroup实践解析【教程】

冰川箭仙

冰川箭仙

发布时间:2026-01-05 17:36:36

|

866人浏览过

|

来源于php中文网

原创

cgroup v2 是当前 Linux CPU 资源隔离的唯一推荐路径,cgroup v1 的 cpu 和 cpuacct 子系统已不建议新项目使用,且在较新内核(5.15+)中默认禁用;根本原因在于未启用 cgroup v2 统一层级或内核参数缺失 systemd.unified_cgroup_hierarchy=1,导致 cpu.weight、cpu.max 等配置被静默忽略。

linuxcpu资源隔离_cgroup实践解析【教程】

直接说结论:cgroup v2 是当前 Linux CPU 资源隔离的唯一推荐路径,cgroup v1cpucpuacct 子系统已不建议新项目使用,且在较新内核(5.15+)中默认禁用。

为什么 systemd 创建的 .slice 有时不生效?

根本原因是未启用 cgroup v2 统一层级,或内核启动参数中缺失 systemd.unified_cgroup_hierarchy=1。即使 systemd 版本 ≥ 243,若内核未启用 v2,cpu.weightcpu.max 等配置会被静默忽略。

  • 检查是否启用 v2:
    cat /proc/filesystems | grep cgroup
    —— 应只看到 cgroup2,无 cgroup(v1)
  • 验证当前 hierarchy:
    mount | grep cgroup
    —— 输出应含 type cgroup2 且挂载点为 /sys/fs/cgroup
  • 若未启用:编辑 /etc/default/grub,在 GRUB_CMDLINE_LINUX 中追加 systemd.unified_cgroup_hierarchy=1,再运行 sudo update-grub && sudo reboot

cpu.maxcpu.weight 的实际行为差异

cpu.weight 是相对权重(1–10000),仅在多个 cgroup 同时争抢 CPU 时起作用;cpu.max 是硬性配额(如 50000 100000 表示最多用 50% CPU 时间),无视其他 cgroup 是否空闲。

ChatMind
ChatMind

ChatMind是一款AI生成思维导图的效率工具,可以通过AI对话生成和编辑思维导图。

下载
  • cpu.weight=100cpu.weight=1000 在只有自己运行时效果完全一样
  • cpu.max=10000 100000 表示每 100ms 周期最多运行 10ms,超时即被 throttled(可通过 cat cpu.stat 查看 nr_throttled
  • 设置 cpu.max 后,cpu.weight 不再参与调度决策——两者互斥使用场景
  • 注意单位:第二字段是 period(默认 100000μs),第一字段是 quota;设为 max 表示不限制

systemd-run 快速测试 CPU 隔离是否生效

避免手动写 /sys/fs/cgroup/ 路径,用 systemd 接口更可靠,也自动处理生命周期。

  • 限制某进程最多用 30% CPU:
    systemd-run --scope -p CPUWeight=10 --scope sleep 300
  • 等价于硬配额方式(更严格):
    systemd-run --scope -p CPUQuota=30% --scope sleep 300
  • 验证是否生效:
    systemd-cgtop -P
    cat /sys/fs/cgroup/$(systemd-run --scope --pipe true)/cpu.stat | grep throttled
  • 常见陷阱:如果目标进程是多线程,且未绑定到特定 cgroup,线程可能逃逸到 root cgroup——务必用 --scope 包裹整个命令,而非仅启动器

真正容易被忽略的是:CPU 隔离效果高度依赖负载类型。对大量 syscalls 或锁竞争型程序,cpu.max 可能导致显著延迟尖刺,而不仅仅是吞吐下降;监控时不能只看 cpu.usage,必须结合 cpu.stat 中的 nr_throttledthrottled_time 才算看清真相。

相关专题

更多
硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1004

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

56

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

303

2025.12.29

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

476

2023.08.10

Python 多线程与异步编程实战
Python 多线程与异步编程实战

本专题系统讲解 Python 多线程与异步编程的核心概念与实战技巧,包括 threading 模块基础、线程同步机制、GIL 原理、asyncio 异步任务管理、协程与事件循环、任务调度与异常处理。通过实战示例,帮助学习者掌握 如何构建高性能、多任务并发的 Python 应用。

141

2025.12.24

default gateway怎么配置
default gateway怎么配置

配置default gateway的步骤:1、了解网络环境;2、获取路由器IP地址;3、登录路由器管理界面;4、找到并配置WAN口设置;5、配置默认网关;6、保存设置并退出;7、检查网络连接是否正常。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

219

2023.12.07

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

1346

2023.06.21

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

700

2023.06.29

漫蛙2入口地址合集
漫蛙2入口地址合集

本专题整合了漫蛙2入口汇总,阅读专题下面的文章了解更多详细内容。

162

2026.01.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 6.7万人学习

Git 教程
Git 教程

共21课时 | 2.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号