Sidekiq Redis 数据库密钥随时间增加
Sidekiq Redis database keys increasing over time
我目前在生产中使用 Sidekiq 和我的 Rails 应用程序以及 ElasticCache Redis 数据库。我最近注意到,在使用 AWS 工具监控 CurrItems 指标时,我看到项目数量随着时间的推移逐渐增加,几乎呈阶梯状:
但是,当我在 Sidekiq 仪表板中查看队列中的作业时,我根本看不到任何备份。我看到队列中有 0 个作业,0 个忙,0 个计划。
阶梯式增长似乎发生在每天非常特定的时间(就在一天结束时),这让我认为这可能与我的 chron job/clockwork 进程有关 运行宁。但是,我只有 4 份工作 运行 每天一次,其中 none 是在那段时间甚至接近那段时间 运行。不过,为了更好的衡量,这是我的 clock.rb 文件(为了简单起见,我已经缩短了所有工作描述和 class 以及方法名称):
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 workers/servers。这是我的 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
有人知道为什么会这样吗?
过去 5 年的历史工作指标按天存储。您看到的是 4-6 keys/day。这为您提供了 Web UI 仪表板上的良好指标。
我目前在生产中使用 Sidekiq 和我的 Rails 应用程序以及 ElasticCache Redis 数据库。我最近注意到,在使用 AWS 工具监控 CurrItems 指标时,我看到项目数量随着时间的推移逐渐增加,几乎呈阶梯状:
但是,当我在 Sidekiq 仪表板中查看队列中的作业时,我根本看不到任何备份。我看到队列中有 0 个作业,0 个忙,0 个计划。
阶梯式增长似乎发生在每天非常特定的时间(就在一天结束时),这让我认为这可能与我的 chron job/clockwork 进程有关 运行宁。但是,我只有 4 份工作 运行 每天一次,其中 none 是在那段时间甚至接近那段时间 运行。不过,为了更好的衡量,这是我的 clock.rb 文件(为了简单起见,我已经缩短了所有工作描述和 class 以及方法名称):
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 workers/servers。这是我的 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
有人知道为什么会这样吗?
过去 5 年的历史工作指标按天存储。您看到的是 4-6 keys/day。这为您提供了 Web UI 仪表板上的良好指标。