讲师中心 微信公众号
AI工具推荐 视频效率加速

cgroups内存上限设置与OOM控制策略详解

阿瑶酱_6172

阿瑶酱_6172

发布时间:2026-03-20 13:08:33

|

909人浏览过

|

来源于php中文网

原创

cgroups v2 中通过 memory.max 设置内存硬上限(如 echo 1G > /sys/fs/cgroup/myapp/memory.max),超限时内核阻塞分配;OOM 仅限本 cgroup 内触发,配合 memory.oom.group=1 可批量终止同进程线程。

cgroups内存上限设置与oom控制策略详解

cgroups v2 中设置内存上限并控制 OOM 行为,核心在于正确配置 memory.max 和 memory.oom.group,同时理解内核如何触发 OOM killer 及其作用范围。

内存硬上限:用 memory.max 严格限制用量

在 cgroups v2 中,memory.max 是唯一生效的硬性内存上限(单位可为 bytes、KB、MB、GB,如 512M)。超出该值时,内核会阻塞新内存分配(即“throttle”),直到内存回落至限额内或被回收。这不同于 v1 的 memory.limit_in_bytes,v2 不再支持 soft limit 或 swap 限额独立控制(swap 统一由 memory.swap.max 管理)。

  • 写入示例:echo 1G > /sys/fs/cgroup/myapp/memory.max
  • 设为 max 表示无限制(等同于不设限)
  • 设为 0 会被拒绝,最小有效值是 4096(一页)
  • 该限制对所有子 cgroup 生效,除非子组显式覆盖

OOM 发生条件与默认行为

当 cgroup 内存使用达到 memory.max,且无法通过 page reclaim(如文件页回收、swap out)快速释放足够内存时,内核会触发 OOM killer。此时它只在该 cgroup 内部选择进程终止——这是 cgroups v2 的关键改进:OOM 隔离按层级进行,不会波及父组或其他兄弟组。

  • 被 kill 的进程满足:属于该 cgroup、非 init 进程、非 kernel thread、有可杀标志(PF_KTHREAD 等除外)
  • 评分依据包括内存占用比例、运行时间、oom_score_adj 值(用户可调)
  • 日志可通过 dmesg 查看,含 cgroup 路径和被杀进程名

精细化 OOM 控制:启用 memory.oom.group

默认情况下,OOM killer 每次只杀一个进程。若希望更激进地保障整体稳定性,可开启 memory.oom.group(写入 1):一旦触发 OOM,内核将杀死该 cgroup 下所有同属一个 memory cgroup 的线程组(即同一进程的所有线程),避免残留内存占用者继续拖累。

  • 适用场景:容器中运行单体应用(如 Java 服务),多个线程共享堆内存
  • 启用后仍遵循 cgroup 边界,不会跨组杀进程
  • 注意:若应用依赖多进程协作(如主从进程模型),启用可能破坏逻辑,需结合业务评估

辅助观测与调试手段

仅设限不够,还需监控是否频繁触限或 OOM。关键接口位于 /sys/fs/cgroup/<path>/memory.*</path>:

  • memory.current:当前实际使用量(含 page cache、anon、swap)
  • memory.stat:细分统计(pgpgin/pgpgout、pgmajfault、workingset_refault 等)
  • memory.events:记录关键事件次数(low、high、max、oom、oom_kill)
  • memory.pressure:提供轻量级压力信号(low/medium/critical),适合 Prometheus 抓取

建议在部署时定期采集 memory.events 中的 oom_kill 计数,作为容量预警指标。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

花生AI
花生AI Hot

一款AI视频创作工具,主要用于B站推出的AI视频创作工具,适合需要提升相关任务效率的用户。

Flowith
Flowith Hot

Flowith是一款基于画布和智能体工作流的 AI 协作工作空间。

小橡皮AI

一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

相关专题

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

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

3208

2023.10.19

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

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

5269

2025.10.17

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

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

3869

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

486

2026.01.19

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

6587

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2748

2023.08.10

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

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

4638

2023.08.10

Java 并发编程高级实践
Java 并发编程高级实践

本专题深入讲解 Java 在高并发开发中的核心技术,涵盖线程模型、Thread 与 Runnable、Lock 与 synchronized、原子类、并发容器、线程池(Executor 框架)、阻塞队列、并发工具类(CountDownLatch、Semaphore)、以及高并发系统设计中的关键策略。通过实战案例帮助学习者全面掌握构建高性能并发应用的工程能力。

583

2025.12.01

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

0

2026.11.05

热门下载

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

精品课程

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn