文件是什么
memory.events 记录某个 cgroup 内存相关事件的累计次数:low、high、max、oom、oom_kill,较新内核还包含 oom_group_kill。它是判断「限额是否被触发过」最直接的证据来源:max 增长说明用量顶到过硬限额,oom_kill 增长说明确实有进程被终止,high 增长说明软限额的节流生效过。配套的 memory.events.local 只统计本组,不含子孙组。
基本信息
| 接口路径 | memory.events 与 memory.events.local |
|---|---|
| 字段 | low、high、max、oom、oom_kill(较新内核含 oom_group_kill) |
| 数值性质 | 累计计数,必须两次采样求差 |
| 统计范围 | events 含子孙组,local 仅本组 |
| 配套文件 | memory.current/peak、memory.stat、memory.pressure |
| 典型用途 | OOM 复盘、限额是否过紧的判定、告警指标来源 |
典型使用场景
- 排查容器是否被 OOM 杀过:看 oom_kill 增量,再与内核日志交叉验证时间点
- 判断限额是否过紧:high 与 max 持续增长说明长期贴着限额运行
- 区分事件归属:events 与 local 对比,确认是本组还是子组触发
- 上线前验证限额:压测后检查事件计数是否符合预期,作为验收项
- 监控告警设计:以 oom_kill 增长作为高优先级告警,high 增长作为容量预警
查看与对比
查看与对比
cat /sys/fs/cgroup/myapp.slice/memory.events # 含子组的累计事件
cat /sys/fs/cgroup/myapp.slice/memory.events.local # 只统计本组自身
watch -n5 'cat /sys/fs/cgroup/myapp.slice/memory.events' # 观察是否在持续增长
cat /sys/fs/cgroup/myapp.slice/memory.peak # 配合峰值判断与限额的距离
journalctl -k -g oom --since '-2h' | tail # 与内核日志交叉验证终止时间
dmesg -T | grep -i 'killed process' | tail # 查看被终止的进程名与 PID字段读法
| 字段 | 含义 | 判读要点 |
|---|---|---|
| low | 该组的内存保护濒临失效的次数 | 增长说明 low 保护不足以挡住回收 |
| high | 超过 memory.high 触发节流的次数 | 增长代表服务曾被压低速度 |
| max | 触及 memory.max 的次数 | 增长说明硬限额被顶到过 |
| oom | 进入 OOM 处理流程的次数 | 通常与 max 同步增长 |
| oom_kill | 实际终止进程的次数 | 只要非零就应复盘,属于事故级信号 |
事件计数是累计值,回答「最近是否发生」必须两次采样求差。若用监控系统采集,应同时保留原始计数值与差值两条曲线,避免只看绝对值判断现状。
events 包含子孙组的累计事件,所以在多级 slice 结构下,父组数字变大不代表父组自己有问题。定位到具体服务时要看对应子组的文件,或使用 memory.events.local 排除子孙组干扰。