首页/数据/Redis 进阶速查/碎片整理参数:阈值与节奏
内存与管理99 条

碎片整理参数:阈值与节奏

active-defrag-ignore-bytes 设定最小碎片量门槛,active-defrag-threshold-lower/upper 控制启停百分比,cycle-min/max 控制每轮 CPU 占比。

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

碎片整理参数管什么

主动碎片整理(activedefrag)在实例运行时搬迁并合并碎片化的内存页,代价是消耗 CPU。参数决定三件事:什么时候开始整理(碎片量门槛与碎片率下限)、强度如何随碎片上升(碎片率上界对应最大力度)、每轮允许占用多少 CPU(cycle 上下限)。

基本信息

总开关activedefrag yes 时才进行整理
最小碎片量active-defrag-ignore-bytes,碎片小于该值不整理
碎片率区间active-defrag-threshold-lower 与 active-defrag-threshold-upper
CPU 占比active-defrag-cycle-min 与 active-defrag-cycle-max
单次扫描上限active-defrag-max-scan-fields,限制集合类结构的处理量

参数与默认参考

参数默认参考作用
active-defrag-ignore-bytes100mb碎片量低于门槛时不启动整理
active-defrag-threshold-lower10碎片率低于该百分比不整理
active-defrag-threshold-upper100碎片率达到该值时按最大力度整理
active-defrag-cycle-min5每轮最低 CPU 时间占比
active-defrag-cycle-max75每轮最高 CPU 时间占比
active-defrag-max-scan-fields1000单次扫描处理的集合类字段数上限

查看与调整

查看与调整
redis-cli CONFIG GET activedefrag          # 确认总开关
redis-cli CONFIG GET active-defrag-*       # 一次性看全部相关参数
redis-cli CONFIG SET activedefrag yes
redis-cli CONFIG SET active-defrag-cycle-max 25   # CPU 敏感实例压低上限
redis-cli INFO memory | grep -E 'mem_fragmentation_ratio|allocator_frag_ratio'

典型使用场景

  • 碎片率高又不想重启实例:用主动整理在线回收
  • CPU 敏感实例:压低 cycle-max,让整理长时间小幅进行
  • 迁移或大批量删除后:内存释放留下空洞,整理收益明显
  • 扩容评估前:先确认碎片是不是水位高的原因
  • 效果观察:改完参数用碎片率与 CPU 曲线确认是否起作用

调参要点

  • 先开总开关再调阈值:activedefrag 为 no 时其他参数不会生效
  • 碎片量低于 ignore-bytes 门槛时不启动,属于设计预期
  • 碎片率低于 threshold-lower 不整理,超过 threshold-upper 才用最大力度
  • CPU 敏感实例压低 cycle-max,低峰段再放大力度
  • 改完用碎片率与 CPU 曲线核对是否真的生效
mem_fragmentation_ratio 长期明显高于 1.5 时通常认为碎片偏多,属于经验判断;改参数前用 CONFIG GET 看清当前值,改后对比同一指标。
cycle-max 设得过高会在业务高峰与请求争抢 CPU,表现为延迟升高;调整前先确认实例还有 CPU 余量,并安排在低峰段放大力度。

易错点

  • cycle-max 过高在业务高峰造成 CPU 争抢,延迟与吞吐一起恶化
  • 阈值改完不观察效果,参数实际未生效或整理没启动也察觉不到
  • 碎片率不高时盲目开启整理,白白消耗 CPU 换不到内存收益
  • 只调整理参数不查碎片来源,大量删除与写入模式仍在持续制造碎片
  • 忽略 ignore-bytes 门槛,误以为开启后就应该立刻看到内存下降

数据来源与参考

  • Redis 官方文档:碎片整理阈值参数
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌