Linux如何管理容器资源_限制CPU与内存的cgroups机制深入理解【技巧】

admin 百科 19
Linux容器资源管理核心是cgroups内核级强制隔离,CPU通过cfs_period_us与cfs_quota_us控制(如quota=200000/period=100000=2核),内存需同时设memory.limit_in_bytes和memory.memsw.limit_in_bytes防swap绕过,绑定推荐cgexec启动,验证须查cgroup原生接口而非top。

Linux如何管理容器资源_限制CPU与内存的cgroups机制深入理解【技巧】-第1张图片-佛山资讯网

Linux容器资源管理的核心,就是靠 cgroups 实现的硬性隔离与精准控制。它不是“建议”或“调度倾向”,而是内核级强制限制——超限就杀进程(如内存OOM)、超时就暂停调度(如CPU配额用尽)。理解关键参数和操作逻辑,比死记命令更重要。

CPU 限制:别只看百分比,要看周期与配额

cgroups 控制 CPU 不是靠“占用率”这个结果,而是通过 cfs_period_us(调度周期)和 cfs_quota_us(该周期内允许使用的 CPU 时间)两个值共同决定的。实际可用 CPU 核心数 = quota / period。

  • 默认周期是 100000 微秒(即 100ms),若设 quota = 50000,则等效为 0.5 个核心(50% 单核)
  • 想限制为 2 个完整核心:quota = 200000,period = 100000
  • 想限制为 4 核服务器上的 75% 总算力(即 3 核):quota = 300000,period = 100000
  • 注意:quota 可大于 period,但不能小于 1000(即 1ms),否则会被内核拒绝

内存限制:物理上限 + swap 容量要分开管

内存控制的关键文件是 memory.limit_in_bytes,但它只管物理内存。如果不限制 swap,进程仍可能把数据换出到磁盘,绕过物理内存限制。

  • 设物理内存上限为 2GB:echo 2147483648 > memory.limit_in_bytes
  • 同时限制“内存+swap”总和为 2.5GB:echo 2684354560 > memory.memsw.limit_in_bytes
  • 一旦进程申请内存导致总用量突破 memsw 上限,OOM Killer 就会介入并终止最“可杀”的进程
  • 不建议关闭 swap,但必须显式配置 memsw,否则 memory.limit_in_bytes 形同虚设

绑定进程:启动时绑定比运行中迁移更可靠

把服务进程纳入 cgroup,有两种主流方式,推荐优先用第一种:

标签: linux app

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~