实战一:内存硬限制与 OOM Killer(终极整合版)
文章目录
- 实战一:内存硬限制与 OOM Killer(终极整合版)
- 一、实验拓扑与参数说明
- 二、一键启动 Redis(启用 DEBUG 命令)
- 三、验证环境就绪
- 四、监控窗口(开 2 个终端)
- 终端 1:实时监控内存
- 终端 2:实时监控 OOM 日志
- 五、内存压测(三种方案任选其一)
- ✅ 方案一:DEBUG POPULATE(最推荐,最快)
- ✅ 方案二:Lua 脚本(兼容性最好,无需 DEBUG)
- ✅ 方案三:redis-benchmark(最接近真实流量)
- 六、验证 OOM Killer 生效
- 1️⃣ 容器状态
- 2️⃣ 确认 OOM 标志
- 3️⃣ 内核日志证据
- 七、关键原理解析(面试常问)
- Q1:为什么 Redis 配置了 `maxmemory 80mb`,却吃了 150MB?
- Q2:为什么是 Exit Code 137?
- Q3:Swap 在这里起什么作用?
- 八、生产环境最佳实践配置
- 九、故障排查速查表
- 十、扩展实验(进阶)
- 实验 A:禁止 Swap(更严格)
- 实验 B:关闭 OOM Killer(观察卡死)
- 十一、一键自动化脚本(复制即用)
- ✅ 总结一句话
实战一:内存硬限制与 OOM Killer(终极整合版)
镜像:
redis:7.2-alpine
核心原理:Cgroup 内存限制 + Redis 主动申请内存 → 触发内核 OOM Killer
适用场景:理解容器内存限制、OOM 机制、Redis 内存溢出行为
一、实验拓扑与参数说明
| 参数 | 值 | 说明 |
|---|---|---|
| 物理内存上限 | 100M | -m 100m |
| Swap 上限 | 50M | --memory-swap 150m |
| 总虚拟内存 | 150M | 物理 + Swap |
| Redis maxmemory | 80M | 预留系统开销 |
| OOM Killer | 启用 |