碎片整理参数管什么
主动碎片整理(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-bytes | 100mb | 碎片量低于门槛时不启动整理 |
| active-defrag-threshold-lower | 10 | 碎片率低于该百分比不整理 |
| active-defrag-threshold-upper | 100 | 碎片率达到该值时按最大力度整理 |
| active-defrag-cycle-min | 5 | 每轮最低 CPU 时间占比 |
| active-defrag-cycle-max | 75 | 每轮最高 CPU 时间占比 |
| active-defrag-max-scan-fields | 1000 | 单次扫描处理的集合类字段数上限 |
查看与调整
查看与调整
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 余量,并安排在低峰段放大力度。