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
在实时生产系统上不能选择重新启动流程。需要一种方法来解决这种内存使用问题。
答案 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的速度,但你确定这是你系统中的一个问题吗?