【问题标题】:Sidekiq Redis database keys increasing over timeSidekiq Redis 数据库键随时间增加
【发布时间】:2016-09-24 11:49:58
【问题描述】:

我目前在生产中使用 Sidekiq 和我的 Rails 应用程序以及 ElasticCache Redis 数据库。我最近注意到,在使用 AWS 工具监控 CurrItems 指标时,我看到项目的数量随着时间的推移以几乎逐步的方式逐渐增加:

但是,当我在 Sidekiq 仪表板中查看队列中的作业时,我根本看不到任何备份。我看到队列中有 0 个作业,0 个忙碌,0 个已安排。

阶梯状的增加似乎发生在每天非常特定的时间(就在一天结束时),这让我认为这可能与我正在运行的计时工作/发条流程有关。但是,我只有 4 个作业每天运行一次,并且在那个时间甚至接近那个时间都没有运行。只是为了更好的衡量,这是我的 clock.rb 文件(为了简单起见,我已经缩短了所有的工作描述以及类和方法名称):

module Clockwork
  every(30.seconds, 'Task 1') { Class.method }
  every(30.seconds, 'Task 2') { Class.method }
  every(10.minutes, 'Task 3') { Class.method }
  every(1.day, 'Task 4', :at => '06:00', :tz => 'EST') { Class.method }
  every(10.minutes, 'Task 5') { Class.method }
  every(1.day, 'Task 6', :at => '20:00', :tz => 'UTC') { Class.method }
  every(1.day, 'Task 7', :at => '20:00', :tz => 'UTC') { Class.method }
  every(1.day, 'Task 8', :at => '20:00', :tz => 'UTC') { Class.method }
  every(1.hour, 'Task 9') {Class.method}
  every(30.minutes, 'Task 10') {Class.method}
  every(30.minutes, 'Task 11') {Class.method}
  every(1.hour, 'Task 12') {Class.method}
end

我不太确定这是从哪里来的。作业完成后,也许 Sidekiq 不会从数据库中删除密钥?

另一个可能有用的信息是我正在运行 4 个工人/服务器。这是我的 Redis 配置:

if (Rails.env == "production" || Rails.env == "staging")
    redis_domain = ENV['REDIS_DOMAIN']  
    redis_port   = ENV['REDIS_PORT']

    redis_url = "redis://#{redis_domain}:#{redis_port}"

    Sidekiq.configure_server do |config|
      ActiveRecord::Base.establish_connection(
          adapter: "postgresql",
          encoding: "unicode",
          database: ENV["RDS_DB_NAME"],
          pool: 25,
          username: ENV["RDS_USERNAME"],
          password: ENV["RDS_PASSWORD"],
          host: ENV["RDS_HOST"],
          port: 5432
      )

      config.redis = {
        namespace: "sidekiq",
        url: redis_url
      }

    end

    Sidekiq.configure_client do |config|
      config.redis = {
        namespace: "sidekiq",
        url: redis_url
      }
    end
end

有人知道为什么会这样吗?

【问题讨论】:

    标签: ruby-on-rails redis sidekiq amazon-elasticache


    【解决方案1】:

    过去 5 年中每天存储历史工作指标。您每天会看到 4-6 把钥匙。这为您在 Web UI 的仪表板上提供了不错的指标。

    【讨论】:

    • 啊,明白了 - 尽管 Redis 数据库在填满时开始清除密钥,但这不会导致问题吗?如果是这样,由于密钥存储了 5 年,因此在生产中是否有推荐的数据库大小?我们使用具有 2.78GB RAM 的 ElasticCache t2.medium
    • 说每个键占用 100 个字节。五年的数据是 4 * 100 * 365 * 5 或 720KB。
    • 太棒了!谢谢迈克
    猜你喜欢
    • 1970-01-01
    • 2016-07-20
    • 1970-01-01
    • 2015-07-22
    • 1970-01-01
    • 2019-10-14
    • 2014-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多