【发布时间】:2020-01-17 13:43:27
【问题描述】:
一个月前,Redis 突然开始快速填满服务器内存。为了调试问题,我们运行了 redis-cli --bigkeys,令我们惊讶的是所有使用的内存都被释放了。
我们有一个由 6 个节点组成的集群,分别是 3 个主节点和 3 个从节点,每个主节点数据库大约 15GB。每个节点都存储在一个专用的盒子中,每个盒子有 64GB。 Redis 每天两次填满 64GB 的整个内存。我们有一个每天两次运行 redis-cli --bigkeys 的 cron 来释放使用的内存。
可能是什么原因?
谢谢。
【问题讨论】:
-
如果 redis-cli --bigkeys 破坏了你的记忆,很可能是过期的密钥尚未被驱逐。检查您的 eviction policy 和 maxmemory 设置。 INFO 的输出可能有助于识别问题。如果可能的话,用更多信息更新问题
-
请参阅redis.io/commands/expire#how-redis-expires-keys,了解为什么 redis-cli --bigkeys 中的 SCAN 会强制驱逐
-
我的驱逐策略是 noeviction 并且 maxmemory 设置为 0。 1) 为了防止它被填满,我应该设置一个 maxmemory 和一个驱逐策略来删除过期的键还是仅仅 maxmemory 就足够了? 2) 推荐的驱逐政策是什么?在阅读了驱逐政策页面后,我更倾向于使用 allkeys-random。 3) 在驱逐未过期的密钥之前,是否有任何驱逐策略首先从过期的密钥开始? @LeoMurillo
标签: redis redis-cluster