Sidekiq如何处理多个队列:工作任务卡顿问题

4

最近我需要对我的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)时,默认值仍然似乎无法处理作业。


6
没错,我在这里就是为了接受负评。 - Andrey Deineko
4
我不确定为什么这个问题被踩了,为了维持熵的恒定性而点赞。 - Aleksei Matiushkin
看起来你有很多工作/长时间的工作,而且 Sidekiq 的并发设置为 1。你可以尝试使用 Rails 控制台和 https://github.com/mperham/sidekiq/wiki/API 来查看发生了什么。 - Pavel Mikhailyuk
此外,将并发性增加至至少10 - Aleksei Matiushkin
2
这不是Capistrano的职责:您只需部署一次,然后启动三次即可。只需为它们创建三个upstart/systemctl配置文件即可。 - Aleksei Matiushkin
显示剩余6条评论
1个回答

0
也许你可以为所有队列运行多个进程,将不同的队列放在不同的进程中以处理sidekiq作业。你的配置将如下所示:
set :sidekiq_processes, 3
set :sidekiq_options_per_process, ['--queue slack_notifier', '--queue invoicing', '--queue default']

我认为这不会使sidekiq停止,但前提是你的sidekiq进程已经优化到足够好,以便它们不会占用比它们应该使用的更多的内存。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接