Redis在Ubuntu内存不足的排查与解决
一 快速止损与定位
二 系统层面扩容与稳定性
三 Redis内部优化降低占用
四 架构与容量治理
五 常见症状与对应措施
| 症状 | 可能原因 | 处理建议 |
|---|---|---|
| 写入报错:OOM command not allowed | maxmemory 达到且策略为 noeviction 或淘汰来不及 | 设置 maxmemory 与合适的 maxmemory-policy(如 allkeys-lru),并清理/扩容 |
| Redis 进程被系统杀死 | 系统内存不足触发 OOM Killer | 增加 Swap、降低 Redis 占用、优化数据结构,必要时扩容物理内存 |
| bgsave/bgrewriteaof 失败或很慢 | fork 阶段内存不足、overcommit 策略不当 | 设置 vm.overcommit_memory=1,并预留足够空闲内存 |
| 延迟抖动、吞吐下降 | 频繁 Swap、THP、碎片率高 | 调整 swappiness、禁用 THP、开启主动碎片整理、优化数据结构 |
| 监控显示 mem_fragmentation_ratio > 1.5 | 内存碎片偏高 | 启用 activedefrag,优化 Key/结构,必要时重启实例重建内存布局 |