首页/数据/Redis 进阶速查/内存碎片处理路径
内存与管理99 条

内存碎片处理路径

碎片偏高时按路径决策:先确认系统内存余量,再评估启用 activedefrag 在线整理或安排重启窗口,重启前先保存持久化文件。

Redis 进阶速查数据更新于 2026-10-13

碎片该怎么处理

内存碎片会让「操作系统看到的进程内存」明显大于「Redis 自己记录的分配量」。INFO memory 里的 mem_fragmentation_ratio 就是这两个数的比值:大于 1 说明有多余碎片,小于 1 往往意味着内存被换出到 swap。处理路径一般是先确认规模,再决定开启在线整理还是安排重启。

基本信息

观察指标mem_fragmentation_ratio = used_memory_rss / used_memory
在线整理activedefrag 及相关阈值参数
诊断建议MEMORY DOCTOR 会给出判断
兜底手段低峰重启,重启前确认持久化状态可用

典型使用场景

  • 比例长期在 1.5 以上,评估是否开启在线碎片整理
  • 键量大且频繁删除重建的业务,碎片增长明显更快
  • 容器内存配额紧张时,碎片会直接挤占可用额度
  • 调整过最大内存或做过大批量删除之后,复查碎片情况
  • 决定重启前,先判断回收收益是否值得一次停写窗口

观测与在线整理

观测与在线整理
# 看分配量与 RSS 的差距,以及碎片比例
redis-cli INFO memory | grep -E 'used_memory|used_memory_rss|mem_fragmentation_ratio'
# 让实例自己给诊断(碎片、swap、内存构成都会提示)
redis-cli MEMORY DOCTOR
# 开启在线整理并控制节奏
redis-cli CONFIG SET activedefrag yes
redis-cli CONFIG SET active-defrag-ignore-bytes 100mb    # 碎片小于这个量就不折腾
redis-cli CONFIG SET active-defrag-threshold-lower 10    # 碎片率达到 10% 开始整理
redis-cli CONFIG SET active-defrag-cycle-max 25          # 每轮最多占用四分之一 CPU 时间

指标读法

指标含义怎么看
used_memoryRedis 记录的分配量反映数据集规模
used_memory_rss操作系统看到的进程常驻内存与分配量的差额就是碎片与开销
mem_fragmentation_ratio两者比值大于 1.5 偏高,小于 1 说明发生了 swap
allocator_frag_ratio分配器层面的碎片率反映分配器管理效率
active_defrag_running当前是否正在整理为 1 表示整理正在进行
在线整理只回收分配器层面的碎片,大键与海量小键带来的结构开销不会因此消失;比例长期偏高时,还要回到数据模型上找原因。
重启是最彻底的回收方式,但代价是一次停写窗口;执行前确认持久化文件可用、主从关系清晰,并选在业务低峰,避免重启后加载失败导致更大的中断。

易错点

  • 看到比例高就立刻把整理力度拉满 → 整理吃掉 CPU 时间,延迟上升 → 低峰小步开启,边观察 CPU 与延迟边调整阈值
  • 把比例小于 1 当成健康信号 → 实际是内存被换出到 swap,延迟已经恶化 → 结合 free 与 swap 使用量一起判断
  • 用重启解决碎片却不检查持久化 → 重启后数据未落盘或加载失败,中断被放大 → 先核对 rdb_last_bgsave_status 与 AOF 状态
  • 只整理碎片不治理数据模型 → 碎片随业务增长回归,变成周期性重启 → 同步评估大键与键数量的增长趋势

数据来源与参考

  • Redis 官方文档:碎片整理与运维建议
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌