Redis的分片率非常高

5

我的Redis集群架构存在高达60%的碎片率。这是好的吗?理想值应该是多少?我应该怎么做才能让它恢复正常?

在工作时间内,碎片率会降低到低至2%,而在非工作时间时则高达50-60%。

这个问题是由于我们将登录/注销会话状态放在Redis中造成的。因此,Redis数据库中频繁进行插入/删除操作。


它会给你带来任何问题吗? - Sergio Tulentsev
“我该怎么做才能让它正常?” - 我建议减少插入/删除操作。 :) - Sergio Tulentsev
不,这不会造成任何问题。但是我们处于初始级别,只有很少的数据传递到 Redis。因此,我非常渴望了解原因。Redis 为我们管理登录会话状态。因此,每次登录/注销都会进行插入/删除操作。 - Ish
也许会有趣?页面末尾关于“内存分配”的讨论。http://redis.io/topics/memory-optimization - Ryan Vincent
3个回答

3
一个大于1的分片比率表示正在发生碎片化。超过1.5的比率表示过度碎片化,Redis实例消耗了请求的物理内存的150%。低于1的碎片化比率告诉您Redis需要比系统上可用的内存更多的内存,这会导致交换。交换到磁盘将导致延迟显著增加(请参见已使用内存)。理想情况下,操作系统将在物理内存中分配一个连续的段,其碎片化比率等于1或略大于1。
如果您的服务器的碎片化比率超过1.5,则重新启动Redis实例将允许操作系统恢复先前由于碎片化而无法使用的内存。在这种情况下,通知警报可能已经足够。
来源:https://www.datadoghq.com/blog/how-to-monitor-redis-performance-metrics/

1
如果您正在使用Lua脚本,并且实例上有一个小的数据集,那么used_memory_lua可能会使这个统计数据失真,因为它没有包含在used_memory中,但它包含在RSS中,所以报告的碎片率似乎过高。请参见this github issue,看看您的情况是否类似。您可以使用命令SCRIPT FLUSH清除缓存的Lua脚本。

但我没有使用Lua脚本。 - Ish

0

使用命令memory purge应该会有所帮助。

MEMORY PURGE命令尝试清除脏页,以便分配器可以回收它们。

只有在使用jemalloc作为分配器时才实现了此命令,并且对于所有其他命令,它都被评估为无害的NOOP。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接