【问题标题】:sidekiq with multiple queues: jobs get stuck具有多个队列的 sidekiq:作业卡住
【发布时间】:2017-12-19 09:00:44
【问题描述】:

我最近不得不优先考虑我的 Sidekiq 队列(在我只使用 default 队列之前)。

所以我写了一些应该在不同队列上执行的作业。

我的sidekiq.yml

:queues:
  - slack_notifier
  - invoicing
  - default

deploy.rb (capistrano):

# ...
set :sidekiq_config, "#{current_path}/config/sidekiq.yml"
# probably below line does same thing as above one
set :sidekiq_options_per_process, ['--queue slack_notifier --queue invoicing --queue default']
# ...

我可以在部署时看到它正在被使用:

01:32 sidekiq:start
      01 $HOME/.rbenv/bin/rbenv exec bundle exec sidekiq --index 0 --pidfile /home/ubuntu/cap/shared/tmp/pids/sidekiq.pid --environment production --logfile /home/ubuntu/cap/shared/log/sidekiq.log --config /home/ubuntu/cap/current/config/sidekiq.yml --queue slack_notifier --queue invoicing --queue default --daemon

Sidekiq 正在运行:

ps aux | grep '[s]idekiq'
#=> ubuntu     716 16.4  2.1 668604 176860 ? Sl   07:31  14:18 sidekiq 4.2.6 cap [1 of 1 busy]

现在,当我开始工作时,它们似乎在某个时候停止了。

不确定我能否更好地描述这个问题。当我清除两个优先级队列(slack_notifierinvoicing)时,默认值似乎仍然没有处理作业。

【问题讨论】:

  • 是的,反对票就是我来这里的目的。
  • 我不确定为什么这个问题被否决了;为了熵恒定而投票赞成。
  • 看来你有很多工作/长期工作和并发 = 1 的 Sidekiq。您可以尝试检查 rails 控制台和github.com/mperham/sidekiq/wiki/API 的情况
  • 您是否尝试过三种不同的sidekiq runner,每个队列一个,如described here
  • 这不是 capistrano 的职责:部署一次,启动 3 次。只需为它们创建三个 upstart/systemctl 配置。

标签: ruby-on-rails ruby capistrano sidekiq jobs


【解决方案1】:

也许您可以为所有队列运行多个进程,将单独的队列放在单独的进程中以处理 sidekiq 作业。您的配置将如下所示

set :sidekiq_processes, 3
set :sidekiq_options_per_process, ['--queue slack_notifier', '--queue invoicing', '--queue default']

我认为它不会停止 sidekiq,但一切的前提是您的 sidekiq 进程已经足够优化,因此它们占用的内存不会超出预期。

【讨论】:

    猜你喜欢
    • 2013-06-16
    • 2014-12-03
    • 2023-01-29
    • 1970-01-01
    • 2018-06-29
    • 2017-09-07
    • 2018-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多