Redis RSS 2.7GB并且还在增加。使用的内存只有40MB。为什么?

时间:2018-01-17 11:43:35

标签: memory redis

Redis版本是3.2。使用的内存显示为大约43MB,而使用的RSS大约是2.7G并且在增加。无法理解为什么会这样。

钥匙的数量也不多:

# Keyspace
db0:keys=4613,expires=62,avg_ttl=368943811

INFO记忆

# Memory
used_memory:45837920
used_memory_human:43.71M
used_memory_rss:2903416832
used_memory_rss_human:2.70G
used_memory_peak:2831823048
used_memory_peak_human:2.64G
total_system_memory:3887792128
total_system_memory_human:3.62G
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
mem_fragmentation_ratio:63.34
mem_allocator:jemalloc-3.6.0

free -h

             total       used       free     shared    buffers     cached
Mem:          3.6G       3.2G       429M       152K       125M        92M
-/+ buffers/cache:       3.0G       647M
Swap:           0B         0B         0B

在实时生产系统上不能选择重新启动流程。需要一种方法来解决这种内存使用问题。

1 个答案:

答案 0 :(得分:1)

即使目前的使用量仅为43M,但在某些时候使用率要高得多:

used_memory_peak:2831823048
used_memory_peak_human:2.64G

因此,您的RSS足迹如此之高并不令人惊讶。有可能的是,即使Redis不再使用内存,分配器还没有将内存释放回操作系统。 Reds v4有一个MEMORY PURGE命令告诉分配器释放它没有使用的内存,但不幸的是,在v3.2上你无法使用它。

您也可能遇到碎片问题。如果您仍在使用的内存在大量分配的许多页面中碎片化,那么您实际上正在使用所有这些页面。在v4中有experimental memory defragmenter,但同样,这对你没有帮助。

您说重启服务器不是一种选择,但如果这只是因为您不会遭受任何停机,您可以考虑启动一个从属节点,复制并将其提升到主节点。这将解决碎片和未发布的内存问题。

但另一个问题是,大型RSS足迹是否对您来说是一个问题。它可能会减慢Redis的速度,但你确定这是你系统中的一个问题吗?