【问题标题】:Redis randomly starts complaining about not being able to save RDB snapshotsRedis 随机开始抱怨无法保存 RDB 快照
【发布时间】:2018-06-29 01:26:22
【问题描述】:

所以我正在运行一个利用 redis 和 sidekiq 的 Rails 应用程序。 config/sidekiq.rb 文件包含一些有关设置 Redis 池大小的信息,但我将其注释掉,以便 Sidekiq 可以动态确定(据我了解)。

因此,虽然我在后台运行了一些 sidekiq 作业,但一切正常。然而,大约 30 - 60 分钟后,sidekiq 似乎仍在运行,但它像每分钟一样吐出这个错误(猜测这是我的 sidekiq cron 作业的间隔):

2018-01-19T17:52:21.906Z 95551 TID-ovs5kqylg 错误:CRON 作业:MISCONF Redis 配置为保存 RDB 快照,但目前没有 能够持久化在磁盘上。可能修改数据集的命令是 禁用,因为此实例配置为在期间报告错误 如果 RDB 快照失败,则写入(stop-writes-on-bgsave-error 选项)。 有关 RDB 错误的详细信息,请查看 Redis 日志。

2018-01-19T17:52:21.906Z 95551 TID-ovs5kqylg 错误:CRON 作业: /home/nutella/.rvm/rubies/ruby-2.5.0/lib/ruby/gems/2.5.0/gems/redis-4.0.1/lib/redis/client.rb:119:in `call'

要解决这个问题,我必须终止 sidekiq 进程并重新启动它 30-60 分钟。

【问题讨论】:

    标签: ruby-on-rails ruby redis cron sidekiq


    【解决方案1】:

    你没有足够的内存。

    默认情况下,Redis 配置为将其数据保存在磁盘上。为了实现这一点,它从主进程创建了一个分叉。至少对于 Linux 系统,一个子进程继承了父进程的 RAM。看来你已经没有足够的时间了。

    最简单的选择是增加 RAM。 Sidekiq 会消耗大量 RAM,因此关闭 Sidekiq 后问题就消失了。

    您可以将 Redis 配置更改为在未保存时不引发异常,但它不会为您节省内存泄漏。

    【讨论】:

    • 我有 4GB 时遇到了问题,但后来我将 VM 升级到 8GB 时仍然遇到同样的问题。我的主机有 32GB,但我几乎觉得如果它像这样在内存中不断增长,它会吃掉所有的 32GB。我不明白的是第一轮任务如何以及为什么运行得非常好,但随着时间的推移它会继续增长?它不应该只使用与执行第一轮预定作业相同的内存量吗?
    • 我几乎觉得我需要创建一个 cron 作业来杀死 sidekiq 并重新启动该进程。
    • 我想我可能是出于错误的原因使用 Sidekiq。将其用作多线程工具,而不仅仅是后台。
    猜你喜欢
    • 1970-01-01
    • 2013-11-04
    • 2020-06-29
    • 1970-01-01
    • 2018-01-09
    • 1970-01-01
    • 2013-11-21
    • 2019-01-02
    • 2014-04-05
    相关资源
    最近更新 更多