【发布时间】:2017-10-29 02:39:48
【问题描述】:
我在 Rails 5 应用程序上使用 SideKiq 和 Heroku Redis。随着时间的推移,我的内存利用率呈线性增长,导致我不得不每个月左右升级我的计划。我的负荷相对平稳。
按照 SideKiq wiki 中的建议,我的驱逐政策为 noeviction。这是否意味着我的内存占用量会随着时间的推移而持续增长?
【问题讨论】:
标签: ruby-on-rails heroku redis sidekiq
我在 Rails 5 应用程序上使用 SideKiq 和 Heroku Redis。随着时间的推移,我的内存利用率呈线性增长,导致我不得不每个月左右升级我的计划。我的负荷相对平稳。
按照 SideKiq wiki 中的建议,我的驱逐政策为 noeviction。这是否意味着我的内存占用量会随着时间的推移而持续增长?
【问题讨论】:
标签: ruby-on-rails heroku redis sidekiq
您应该运行 2 个 Redis 实例,一个用于缓存,另一个专用于 Sidekiq。
这里有一个来自 Sidekiq wiki 的条目解释了这一点:
许多人将 Redis 用作缓存(它作为 Rails 缓存存储非常有用),但重要的是要针对未配置为缓存而是作为持久存储的 Redis 实例运行 Sidekiq。如果您希望使用 Redis 进行缓存和 Sidekiq,我建议使用两个单独的 Redis 实例,每个实例都进行了适当的配置。 Redis 命名空间不允许这种配置,并且会带来许多其他问题,因此始终首选使用离散的 Redis 实例。
这样,缓存存储 Redis 将能够根据需要管理驱逐和内存,而 Sidekiq Redis 将能够持久地保留作业而不会面临驱逐风险。正如你所说,Sidekiq Redis 实例应该设置noeviction。
只是一个猜测,但您的内存线性增加的原因可能是因为在 Rails 应用程序的其他地方您会使用 Redis,并且由于驱逐政策,数据不会被清除,也许这甚至是 Rails在幕后这样做,虽然我相信 Rails 会在任何地方设置一个 TTL,但我不确定。
【讨论】:
noeviction 是 Redis 中的驱逐策略设置。如果达到最大内存使用量,它会导致 Redis 返回错误。
要限制 Redis 中的内存使用量,您可以在 redis.conf 文件中设置并设置 maxmemory 设置。
Read here 了解更多信息。
【讨论】: