如何减少Redis中的mem_fragmentation_ratio?

时间:2019-06-28 01:18:29

标签: redis

通过info命令,我得到

mem_fragmentation_ratio:1.24

大于1

我知道这意味着Redis拥有一些可以释放的可用内存。

如何释放此内存并降低此比例?

我尝试过MEMORY PURGE,但是比率没有变化。

redis_version:4.0.9

# Memory
used_memory:8347302992
used_memory_human:7.77G
used_memory_rss:9236336640
used_memory_rss_human:8.60G
used_memory_peak:17919661152
used_memory_peak_human:16.69G
used_memory_peak_perc:46.58%
used_memory_overhead:519883816
used_memory_startup:1215600
used_memory_dataset:7827419176
used_memory_dataset_perc:93.79%
total_system_memory:270383198208
total_system_memory_human:251.81G
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:21474836480
maxmemory_human:20.00G
maxmemory_policy:noeviction
mem_fragmentation_ratio:1.11
mem_allocator:jemalloc-4.0.3
active_defrag_running:0
lazyfree_pending_objects:0

1 个答案:

答案 0 :(得分:1)

Redis对于释放未使用的内存不是很好。通常,redis将保留其在峰值时消耗的所有内存。只要您的服务器具有足够的内存来为其服务,通常这不是问题。从您的信息中可以看到,您的服务器的内存比您正用于Redis的内存要多得多。

要清楚,MEMORY PURGE command仅与jemalloc内存分配器一起使用:

  

MEMORY PURGE命令尝试清除脏页,以便分配器可以回收这些脏页。

     

该命令当前仅在将jemalloc用作分配器时才实现,并且对所有其他命令都评估为良性NOOP。

因此,如果您在Windows或Mac上运行Redis,则可能无法使用MEMORY PURGE

但是,总的来说,我不会担心碎片率如此接近1的问题。通常只有当碎片率低于1或远远高于1(例如10或更高)时,才会出现问题。 / p>