redis自动清理设置

Redis4.0版本之后支持在运行期进行自动内存碎片清理
通过设置config set activedefrag yes

# redis-cli info memory
# Memory
used_memory:94924567648
used_memory_human:88.41G
used_memory_rss:122715869184
used_memory_rss_human:114.29G
used_memory_peak:138010337568
used_memory_peak_human:128.53G
used_memory_peak_perc:68.78%
used_memory_overhead:21483503188
used_memory_startup:6123112
used_memory_dataset:73441064460
used_memory_dataset_perc:77.37%
total_system_memory:202987839488
total_system_memory_human:189.05G
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:128849018880
maxmemory_human:120.00G
maxmemory_policy:noeviction
#mem_fragmentation_ratio:1.29
mem_allocator:jemalloc-4.0.3
active_defrag_running:0
lazyfree_pending_objects:0

retio的值为1.29,说明有很多内存碎片

执行以下命令开始整理:
[root@xxx]# redis-cli -p 6379 config set activedefrag yes
OK

active-defrag-ignore-bytes 100mb:表示内存碎片的字节数达到100MB时,开始清理;
active-defrag-threshold-lower 10:表示内存碎片空间占操作系统分配给Redis的总空间比例达到10%时,开始清理。
最后,控制清理操作占用CPU时间比例的上、下限:

active-defrag-cycle-min 25: 表示自动清理过程所用CPU时间的比例不低于25%,保证清理能正常开展;
active-defrag-cycle-max 75:表示自动清理过程所用CPU时间的比例不高于75%,一旦超过,就停止清理,从而避免在清理时,大量的内存拷贝阻塞Redis,导致响应延迟升高。
总结
info memory命令是一个好工具,可以帮助你查看碎片率的情况;
碎片率阈值是一个好经验,可以帮忙你有效地判断是否要进行碎片清理了;
内存碎片自动清理是一个好方法,可以避免因为碎片导致Redis的内存实际利用率降低,提升成本收益率。
如果你在实践过程中遇到Redis性能变慢,记得通过日志看下是否正在进行碎片清理。如果Redis的确正在清理碎片,那么,建议你调小active-defrag-cycle-max的值,以减轻对正常请求处理的影响。

你可能感兴趣的:(redis自动清理设置)