Redis删除数据后内存不释放解决方法

Redis About 1,367 words

查看内存占用

info memory

输出

127.0.0.1:6379> info memory
# Memory
used_memory:3220899496
used_memory_human:3.00G
used_memory_rss:3304706048
used_memory_rss_human:3.08G
used_memory_peak:3221246176
used_memory_peak_human:3.00G
total_system_memory:33625522176
total_system_memory_human:31.32G
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:3221225472
maxmemory_human:3.00G
maxmemory_policy:volatile-lru
mem_fragmentation_ratio:6.03
mem_allocator:jemalloc-4.0.3

字段解释

  • used_memory_human:数据占用的内存
  • used_memory_rss_humanRedis占用的内存
  • used_memory_peak_human:占用内存的峰值
  • mem_fragmentation_ratio:内存碎片率

mem_fragmentation_ratio

mem_fragmentation_ratio = used_memory_rss / used_memory

越低越高,趋向于1,大于1的部分redis碎片占用的大小。范围在1 - 1.5,大于1.5说明碎片过多,必须要清理了。

解决方法

内存碎片过多解决方法需根据Redis版本来定。

Redis4.0之前

只能重启Redis服务。

Redis4.0之后

方法一:开启activedefrag,自动清理内存碎片,默认没有开启,但线上会影响性能。

命令行中设置config set activedefrag yes

或在配置文件中修改配置:

# 开启自动内存碎片整理(总开关)
activedefrag yes
# 当碎片达到 100mb 时,开启内存碎片整理
active-defrag-ignore-bytes 100mb
# 当碎片超过 10% 时,开启内存碎片整理
active-defrag-threshold-lower 10
# 内存碎片超过 100%,则尽最大努力整理
active-defrag-threshold-upper 100
# 内存自动整理占用资源最小百分比
active-defrag-cycle-min 25
# 内存自动整理占用资源最大百分比
active-defrag-cycle-max 75

方法二:memory purge命令,手动清理内存碎片,以一个I/O事件的形式注册到主线程当中去执行。

只能适用于jemalloc内存分配器。

memory purge的效果相比于activedefrag并没有很大差别。

建议根据实际情况与activedefrag配合使用。

文档

https://redis.io/commands/memory-purge

Views: 4,625 · Posted: 2020-10-22

————        END        ————

Give me a Star, Thanks:)

https://github.com/fendoudebb/LiteNote

扫描下方二维码关注公众号和小程序↓↓↓

扫描下方二维码关注公众号和小程序↓↓↓


Today On History
Browsing Refresh