Sidekiq作业卡在排队中

57

在开发模式下,Sidekiq运行得非常好。现在我要在生产环境中使用它,所有的作业都只是停留在排队状态,并且从未被执行。请问有谁能指引我解决这个问题的方向?


1
我假设你在生产环境中至少运行了一个 Sidekiq 工作进程? - cthulhu
是的,我相信如此。您具体指的是什么?我通过运行以下命令启动了Sidekiq:bundle exec sidekiq -d -L /path/to/log。在我的Rails代码中有一个异步调用到我创建的worker。 - groffcole
1
你的日志里有什么?你看到 Sidekiq 进程了吗?(ps aux | grep sidekiq)你的 Sidekiq 控制台里有什么? - cthulhu
1
你将工作放在默认队列中吗? - cthulhu
1
看起来你的 Sidekiq 进程根本没有启动,如果你发布了 'ps aux | grep sidekiq' 命令的完整输出,请尝试首先在前台启动 Sidekiq,不使用任何其他选项,只需输入 'bundle exec sidekiq'。 - cthulhu
显示剩余6条评论
8个回答

56
请检查 Sidekiq 进程是否正在运行:
ps aux | grep sidekiq

如果不行的话,先尝试在前台运行sidekiq并检查输出。

bundle exec sidekiq -e production

如此简单,却又如此正确。在我的特定情况下,我配置了错误的工作文件,它正在终止sidekiq进程。 - Jay Dorsey

20

在很多情况下,这是因为我没有在config/sidekiq.yml中正确声明了该特定服务的队列。


1
挣扎了一段时间。Rails将事物排队到“邮件程序”,但我在我的配置中有“邮件程序”。 - hirowatari
希望我能给更多的点赞。错过那个真是太令人沮丧了。 - traday

4
这个答案看起来很相关:Sidekiq未处理队列。如果没有告诉Sidekiq配置文件(在生产环境中可能需要不同的咒语),那么它可能没有使用正确的队列。

1
那对我来说确实是这样的。 - Deano
如果您使用capistrano-sidekiq的默认选项,则需要设置配置文件设置。 - Zia Ul Rehman Mughal

3

提醒大家注意一下,我来到这个页面是为了找出我的Rails Sidkiq作业为什么没有从“enqueued”状态转移。

  1. 在终端中检查你的sidekiq控制台
  2. 我的问题让我陷入困境,差点浪费了一个小时......啊哈... 我在代码中加了一个'byebug'断点,这很傻,不该放在后台任务中。这会完全破坏你的工作流程。显然......我不是故意把断点放在那里的。我发誓:)

2
我的解决方案:
1.) 查看您应用程序的Sidekiq Web UI(这是您可以查看作业进入排队状态的地方)。
2.) 手动重试失败的作业。
3.) 检查运行Sidekiq的服务器上的日志:
(通常情况下,如果您在暂存环境中执行此操作,则日志将位于此处)。
tail -f /var/www/yourappname/current/log/staging.log

通常在这里,您会看到更详细的错误消息,说明为什么Sidekiq无法处理已排队的作业。 在我们的情况下,有一个环境变量指向了特定于我们部署配置的不正确的端点。

1

确保您的应用程序 sidekiq 进程正在运行

$ ps aux | grep sidekiq
server   26813  0.0  0.0  14228  1084 pts/11   S+   11:27   0:00 grep --color=auto sidekiq
server   27936  0.3  0.6 1178904 153240 ?      Sl   Apr17  46:02 sidekiq 5.2.7 app1 [0 of 10 busy]

这个示例表明只有一个sidekiq进程在运行(app1)。如果你的应用程序不在列表中,则必须为你的应用程序启动sidekiq进程,在这个示例中是app2。gem capistrano-sidekiq 可以让你的生活更轻松:
$ cap production sidekiq:start
00:00 sidekiq:start
      01 $HOME/.rbenv/bin/rbenv exec bundle exec sidekiq --index 0 --pidfile /var/www/app2/shared/tmp/pids/sidekiq-0.pid --environment produ…
    ✔ 01 server@103.n.nnn.nnn 0.400s

并且app2进程将被激活。现在,请再次检查。

$ ps aux | grep sidekiq
server   25857  8.6  7.6 3073532 1870244 ?     Sl   11:15   1:02 sidekiq 5.2.8 app2 [0 of 10 busy]
server   26813  0.0  0.0  14228  1084 pts/11   S+   11:27   0:00 grep --color=auto sidekiq
server   27936  0.3  0.6 1178904 153240 ?      Sl   Apr17  46:02 sidekiq 5.2.7 app1 [0 of 10 busy]

队列应该一直正常运行。

0
如果你在Heroku上,确保在资源选项卡上启用了Sidekiq :)

enter image description here


0

使用 capistrano-sidekiq gem 解决了我们的问题


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