【发布时间】:2016-07-17 13:11:42
【问题描述】:
这是我的问题:“mem_fragmentation_rateo”如何影响 Redis 的性能?
我在 stackoverflow 和 redis.io 中做了一些调查,但我真的找不到关于我的问题的明确解释。
正如本电子书 https://www.datadoghq.com/wp-content/uploads/2013/09/Understanding-the-Top-5-Redis-Performance-Metrics.pdf 第 16 页中所解释的,“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”?同样在我之前提到的电子书中,他们建议将“mem_fragmentation_rateo”设置在 1 到 1.5 之间。
在这种情况下,当我们有更高的“used_memory_rss”时,Redis 真的会受到影响吗?我们是否应该预期“mem_fragmentation_ratio”较高时 Redis 性能会下降?
我决定问你这个问题,因为老实说,我认为,在“mem_fragmentation_ratio”很高的情况下,我们可以“仅”在操作系统中遇到问题,“可能”会遇到内存不足的问题:操作系统不能t 为新进程分配新内存。无论如何,它不应该直接影响 Redis(除非操作系统开始变慢等)。
你能澄清我的疑问吗?您是否有过“mem_fragmentation_ratio”过高的情况,并且您开始注意到 Redis 的性能下降?
谢谢
【问题讨论】: