Lew*_*uce 2 ruby cron ruby-on-rails redis sidekiq
所以我正在运行一个利用 redis 和 sidekiq 的 Rails 应用程序。该config/sidekiq.rb文件包含一些关于设置 Redis 池大小的信息,但我将其注释掉,以便 Sidekiq 可以动态确定(根据我的理解)。
因此,虽然我在后台运行了一些 sidekiq 作业,但一切正常。然而,大约 30 - 60 分钟后,sidekiq 似乎仍在运行,但它像每分钟一样吐出这个错误(猜测这是我的 sidekiq cron 作业的间隔):
2018-01-19T17:52:21.906Z 95551 TID-ovs5kqylg 错误:CRON JOB: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`调用'
为了解决这个问题,我必须终止 sidekiq 进程并重新启动它 30-60 分钟。
你没有足够的内存。
默认情况下,Redis 配置为将其数据保存在磁盘上。为了实现这一点,它从主进程创建了一个分支。至少对于 Linux 系统,子进程从父进程继承使用的 RAM。看来你还没有离开。
最简单的选择是增加 RAM。Sidekiq 消耗大量内存,因此当您关闭 Sidekiq 时,问题就消失了。
您可以将 Redis 配置更改为在未保存时不抛出异常,但不会为您节省内存泄漏。