通过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
答案 0 :(得分:1)
Redis对于释放未使用的内存不是很好。通常,redis将保留其在峰值时消耗的所有内存。只要您的服务器具有足够的内存来为其服务,通常这不是问题。从您的信息中可以看到,您的服务器的内存比您正用于Redis的内存要多得多。
要清楚,MEMORY PURGE
command仅与jemalloc内存分配器一起使用:
MEMORY PURGE命令尝试清除脏页,以便分配器可以回收这些脏页。
该命令当前仅在将jemalloc用作分配器时才实现,并且对所有其他命令都评估为良性NOOP。
因此,如果您在Windows或Mac上运行Redis,则可能无法使用MEMORY PURGE
。
但是,总的来说,我不会担心碎片率如此接近1的问题。通常只有当碎片率低于1或远远高于1(例如10或更高)时,才会出现问题。 / p>