MEMORY DOCTOR 是什么
MEMORY DOCTOR 是 Redis 4.0 起提供的 MEMORY 子命令,一次性汇总实例内存的体检结论:峰值内存、碎片率、是否已接近 maxmemory、有没有大量换出等,并把结论写成一段人话建议。它不返回结构化字段,只输出文本,定位是内存排查的第一站而不是唯一依据。
基本信息
| 命令 | MEMORY DOCTOR |
|---|---|
| 起始版本 | Redis 4.0(MEMORY 子命令族) |
| 权限要求 | 普通连接即可,无需 admin 类权限 |
| 输出 | 纯文本诊断与建议 |
| 副作用 | 只读,可随时执行 |
| 建议搭配 | INFO memory / MEMORY STATS / MEMORY USAGE |
典型使用场景
- 刚接手一个实例:先看它有没有碎片、水位、换出这几类问题
- 收到内存告警后的第一步,用来决定往哪个方向深挖
- 变更前后各跑一次留档,作为容量与调优的对照材料
- 向不熟悉 Redis 的同事解释当前内存状况,文本比指标表更直观
- 确认 maxmemory 水位与淘汰是否已经开始影响业务
巡检与留档用法
巡检与留档用法
redis-cli -h 10.0.0.12 -p 6379 MEMORY DOCTOR # 只读命令,随时可跑
redis-cli MEMORY DOCTOR > doctor-$(date +%F).txt # 落盘留档,便于前后对比
redis-cli INFO memory | grep -E 'used_memory_human|maxmemory_human|mem_fragmentation_ratio' # 补上关键指标
redis-cli MEMORY STATS | head -20 # 结构化字段:peak、overhead、碎片
redis-cli INFO stats | grep -E 'evicted_keys|expired_keys' # 有淘汰说明真到了上限
redis-cli MEMORY USAGE user:1001 # 怀疑单个键偏大时定点核查报告要点读法
| 提示类型 | 含义 | 对应动作 |
|---|---|---|
| 碎片率偏高 | 分配器持有但未使用的内存偏多 | 看 MEMORY STATS 的 overhead,低峰再考虑 MEMORY PURGE |
| 接近内存上限 | used_memory 已逼近 maxmemory | 结合 evicted_keys 与淘汰策略,评估扩容或拆分实例 |
| 存在换出 | 内存被换到磁盘上 | 到系统层看 vm.swappiness 与 swap 曲线,关注延迟毛刺 |
| 峰值内存 | 历史峰值记录 | 容量规划按峰值定规格,不要用当前值 |
输出是散文体建议,措辞随版本演进,不要写死关键词做监控解析;机器判定请改用 INFO memory 与 MEMORY STATS。
健康实例也会打印一段内存摘要,看到文本不等于出了故障;有结论性提示时才需要往下查。
三项指标同时看
三项指标同时看
# 水位、碎片、淘汰三条线一起看,比单看一条更可靠
redis-cli INFO memory | grep -E 'used_memory:|maxmemory:|mem_fragmentation_ratio:'
redis-cli INFO stats | grep -E 'evicted_keys|expired_keys'报告里的建议是方向不是命令:例如针对碎片或内存回收的建议往往涉及阻塞操作,先评估影响再决定是否执行。