MEMORY DOCTOR 是什么
MEMORY DOCTOR 是 Redis 的内存体检入口:它把若干指标综合成一句人类可读的结论,例如实例几乎没用到内存、碎片率过高、内存峰值逼近上限等,适合放进巡检脚本或告警附言。它只是线索而不是判决——碎片率高不代表必须重启,关键是结合 mem_fragmentation_ratio、maxmemory 配置与业务波动一起判断。
基本信息
| 适用版本 | Redis 4.0+ 提供 MEMORY 命令族 |
|---|---|
| 诊断 | MEMORY DOCTOR 输出一句结论 |
| 用量 | MEMORY USAGE key [SAMPLES n] 单键占用 |
| 统计 | MEMORY STATS 输出结构化内存指标 |
| 碎片率 | INFO memory 的 mem_fragmentation_ratio = RSS / used_memory |
| 参考区间 | 约 1.0-1.5 视为常见范围(跨版本与场景有差异) |
典型使用场景
- 日常巡检:把 DOCTOR 结论与关键指标一起采集,快速判断实例是否健康
- 故障排查起点:内存告警时先看结论,再逐项展开指标
- 扩容评估:用 MEMORY STATS 定位内存主要消耗在哪个部分
- 大 key 排查:用 MEMORY USAGE 逐个确认可疑键的占用
- 重启决策前核对:碎片率是否真的高到需要重启,而不是正常波动
体检示例
体检示例
MEMORY DOCTOR
# 可能的结论示例:
# Hi Sam, this instance is empty or is using very little memory.
# This instance has a peak of X GB and is currently using Y...
# This instance has memory fragmentation ratio 1.7...
# 结构化指标
MEMORY STATS
# 关键碎片指标
INFO memory | grep -E 'used_memory_human|used_memory_peak_human|mem_fragmentation_ratio|mem_fragmentation_bytes|allocator_frag_ratio'
# 单键占用排查
MEMORY USAGE bigkey SAMPLES 5指标读法
| 指标 | 含义 | 异常信号 |
|---|---|---|
| used_memory | Redis 分配器统计的已用内存 | 接近 maxmemory 时触发淘汰 |
| used_memory_rss | 操作系统视角的常驻内存 | 与 used_memory 差距大说明碎片多 |
| mem_fragmentation_ratio | RSS / used_memory | 长期高于 1.5 需关注 |
| mem_fragmentation_bytes | 碎片绝对字节数 | 几十字节级差异可忽略 |
| maxmemory_policy | 淘汰策略 | 未设置 maxmemory 时内存无上限风险 |
碎片率小于 1 也要注意:那说明使用了 swap 或内存被换出,性能会急剧下降;生产环境通常应关闭 swap 或把 vm.swappiness 调低。
不要因为一句 DOCTOR 结论就重启实例:碎片率在实际运行中会随写入模式波动,重启前应确认指标长期异常、已有迁移方案,且评估重启带来的缓存穿透与业务抖动。