Skip to content

Latest commit

 

History

History
31 lines (14 loc) · 2.18 KB

File metadata and controls

31 lines (14 loc) · 2.18 KB

如果在使用 Redis 的过程中发现内存占用过高,特别是在执行 BGSAVE 命令时,可能有几个原因导致这种情况。下面是一些可能的原因和相应的解决方法:

  1. 内存碎片化:Redis 使用一种称为 Copy-on-Write 的技术来进行持久化,它在执行 BGSAVE 时需要创建一个子进程来将内存中的数据写入磁盘。如果内存中存在大量的碎片化空间,那么 BGSAVE 将需要复制更多的内存数据,导致内存占用增加。解决这个问题的方法是定期使用 MEMORY DEFRAG 命令或者重启 Redis 实例来进行内存碎片整理。

  2. 数据集过大:如果 Redis 存储的数据集非常大,执行 BGSAVE 时需要将整个数据集写入磁盘,这会导致内存占用增加。可以考虑使用 Redis 的分片技术将数据集分散到多个 Redis 实例上,以减少单个实例的内存占用。

  3. 持久化配置问题:检查 Redis 的持久化配置,确保配置项 save 的设置合理。如果 save 配置的时间间隔太短,导致频繁执行 BGSAVE,会增加内存占用。可以适当增加时间间隔,或者改为使用 AOF(Append-Only File)持久化方式。

  4. 内存淘汰策略:Redis 提供了多种内存淘汰策略,用于在内存不足时选择要删除的键。检查配置项 maxmemory-policy,确保选择的策略适合你的应用场景。如果使用了 LRU(Least Recently Used)策略,可以考虑更改为其他策略,如 volatile-lruallkeys-lru

  5. 内存泄漏:检查应用程序和 Redis 客户端代码,确保没有发生内存泄漏。内存泄漏可能导致内存占用持续增长,即使执行 BGSAVE 也无法解决问题。

  6. 升级 Redis 版本:如果你正在使用较旧的 Redis 版本,尝试升级到最新的稳定版本。新版本通常修复了一些内存管理方面的问题,可能会改善内存占用情况。

    save 900 1

    save 300 10

    save 60 20000

redis集群优化建议:

1,现有集群调大bgsave的阈值由10000改为20000

2,新redis集群修改内存淘汰机制.为volatile-lruallkeys-lru

3,新机房内存扩到64g,应对业务调用量上升