Redis:“mem_fragmentation_ratio”如何影响性能?

时间:2016-07-17 13:11:42

标签: redis amazon-elasticache

这是我的问题:“mem_fragmentation_rateo”如何影响Redis的性能?

我在stackoverflow和redis.io中做了一些调查,但我无法找到关于我的问题的明确解释。

正如第16页的本电子书https://www.datadoghq.com/wp-content/uploads/2013/09/Understanding-the-Top-5-Redis-Performance-Metrics.pdf中所述,“mem_fragmentation_ratio指标给出了操作系统使用的内存(used_memory_rss)与Redis(used_memory)分配的内存的比率。”

所以,正如http://redis.io/commands/INFO中所解释的那样,“理想情况下,used_memory_rss值应该略高于used_memory。当使用rss>>时,差异很大意味着存在内存碎片(内部或外部),可以通过检查mem_fragmentation_ratio来评估。当使用>> rss时,它意味着操作系统已经交换了部分Redis内存:期望一些重要的延迟“。

因此,当我们有更高的“used_memory”而不是“used_memory_rss”时,对Redis节点的负面影响很明显,因为这意味着Redis开始使用Swap,这显然不利于性能。

但是,我们的“used_memory_rss”高于“used_memory”的情况怎么样?这可能意味着我们的内存分配器没有“收回”过去分配给Redis的部分内存,并且Redis不再使用(可能是由于临时峰值)。但是,我无法理解这会如何对Redis性能产生负面影响。为什么我在互联网上阅读很多帖子,人们如此关注高级“mem_fragmentation_ratio”?同样在我之前提到的电子书中,他们建议在1到1.5之间使用“mem_fragmentation_rateo”。

在这种情况下,当我们有一个更高的“used_memory_rss”时,Redis真的受到了影响吗?我们是否应该期望使用高“mem_fragmentation_ratio”降低Redis性能?

我决定问你这个问题,因为老实说我认为,在“mem_fragmentation_ratio”很高的情况下,我们可以在操作系统中“只有”一个问题,“可能”遭受内存不足的困扰:操作系统可以' t为新进程分配新内存。无论如何,它不应该直接影响Redis(除非操作系统开始减速,等等。)

你能澄清一下我的怀疑吗?您是否有过经历过高“mem_fragmentation_ratio”的经历,并且您开始注意到Redis的性能下降了?

谢谢

1 个答案:

答案 0 :(得分:1)

我不是Redis大师,但根据我阅读的经验和文档,fragmentation_ratio不会直接影响性能。但它增加了内存消耗。 当您的应用程序添加新数据并且数据未填充内存中的空闲片段时(当新数据束大于这些片段时),该内存保持空闲。因此,您可以比预期更快地耗尽内存。