gpt4 book ai didi

Redis 快速填满内存,运行 --bigkeys 释放它

转载 作者:行者123 更新时间:2023-12-03 06:42:44 27 4
gpt4 key购买 nike

一个月前,Redis 突然开始快速填满服务器内存。为了调试问题,我们运行了 redis-cli --bigkeys,令我们惊讶的是,所有使用的内存都被释放了。

我们有一个由 6 个节点组成的集群,分别是 3 个主节点和 3 个从节点,每个主节点数据库大约 15GB。每个节点都存储在一个专用的盒子中,每个盒子有 64GB。 Redis 每天两次填满 64GB 的整个内存。我们有一个每天两次运行 redis-cli --bigkeys 的 cron 来释放使用的内存。

可能是什么原因?

谢谢你。

最佳答案

听起来你得到了OOM command not allowed错误,除非你运行 redis-cli --bigkeys一天两次。

如果是这种情况,您可能有许多和/或大键与 EXPIRE ,不断添加。过期的 key 从内存中删除:

  • 被动:当你尝试访问它并且发现 key 超时时。 这就是 redis-cli --bigkeys正在帮助您 ,它强制对所有键空间进行被动删除。
  • 主动:每 100 毫秒,它会尝试从内存中删除过期 key at random ,从不会在每个周期投入超过 1 毫秒的时间,直到它估计剩余的过期 key 不到 25%。逻辑不是那么简单,见activeExpireCycle .

  • 因此,在您的情况下,事件到期无法 catch 这一切。

    根据您的评论, maxmemory=0maxmemory-policy=noeviction .您可能需要考虑设置 maxmemory值和 maxmemory-policy=noevictionvolatile-ttl (删除过期时间最近的 key )。

    这是做什么的,只要写命令发现你结束了 maxmemory ,它将根据策略尝试为新 key 释放空间。 volatile-ttl策略将首先驱逐任何剩余的过期 key 。 See evict.c .

    您还可以增加后台任务的频率,以更频繁地清除过期 key ,请参阅 redis.conf 中的 hz .你可以加倍到20。

    By default "hz" is set to 10. Raising the value will use more CPU when Redis is idle, but at the same time will make Redis more responsive when there are many keys expiring at the same time, and timeouts may be handled with more precision.



    另外, activedefrag = yes可能有帮助,请参阅 here .

    有一个新的 active-expire-effort redis.conf 设置将允许您在 active-expire 中投入更多 CPU,但在最新的稳定版本 (5.0.7) 中不可用。

    使用 INFO memory了解您的 redis 服务器内存状态。如果上述内容对您没有帮助,请使用此输出更新问题。

    关于Redis 快速填满内存,运行 --bigkeys 释放它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59777591/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com