Redis占用太多内存

时间:2019-01-10 16:46:26

标签: redis predis

我在两个centos 6 VM中设置了Redis(版本4.0.6)哨兵群集。主备Redis服务器和从属Redis服务器都将maxmemory设置为10GB,并将maxmemory_policy设置为volatile-lru。

问题是,两个服务器都占用大量内存。

大师

used_memory:8959732536
used_memory_human:8.34G
used_memory_rss:14763728896
used_memory_rss_human:13.75G
used_memory_peak:10002148536
used_memory_peak_human:9.32G
used_memory_peak_perc:89.58%
used_memory_overhead:1344839894
used_memory_startup:761776
used_memory_dataset:7614892642
used_memory_dataset_perc:85.00%
total_system_memory:20957556736
total_system_memory_human:19.52G
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:10000000000
maxmemory_human:9.31G
maxmemory_policy:volatile-lru
mem_fragmentation_ratio:1.65
mem_allocator:jemalloc-3.6.0
active_defrag_running:0
lazyfree_pending_objects:0

奴隶

used_memory:8927665872
used_memory_human:8.31G
used_memory_rss:16422535168
used_memory_rss_human:15.29G
used_memory_peak:10000009472
used_memory_peak_human:9.31G
used_memory_peak_perc:89.28%
used_memory_overhead:1340505548
used_memory_startup:761792
used_memory_dataset:7587160324
used_memory_dataset_perc:84.99%
total_system_memory:20957556736
total_system_memory_human:19.52G
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:10000000000
maxmemory_human:9.31G
maxmemory_policy:volatile-lru
mem_fragmentation_ratio:1.84
mem_allocator:jemalloc-3.6.0
active_defrag_running:0
lazyfree_pending_objects:0

Redis在主服务器和从属服务器上分别占用了14064.8 MB和15664.2 MB。 我确实有很多数据存储在Redis中。他们中的大多数人都设置了到期日,而有些人没有到期日。

问题是,即使将最大内存设置为10 GB,为什么redis在VM中也要占用约15GB。

我看到已用内存低于10GB,而rss内存为15GB。

我确实运行了MEMORY PURGE,它清除了部分rss内存,但在几分钟之内重新填充了该内存并保持增长。

关于如何控制内存消耗的任何建议,或针对此问题的永久解决方案。我应该增加VM中的RAM吗?如果是,我应该添加多少内存来处理这种情况。

1 个答案:

答案 0 :(得分:0)

RSS内存将始终大于Redis用于数据集的实际内存。在您的情况下,您似乎还遭受内存碎片的困扰,因此应考虑启用主动碎片整理程序。

也就是说,为服务器分配更多的RAM将使它们达到更高的碎片率,因此添加的越多,达到内存压力所花费的时间就越长。由于碎片取决于使用情况,因此很难准确地说出您需要多少碎片,但是在大多数情况下,碎片会在一段时间后达到平稳状态,从而为您提供一些提示。