【发布时间】:2017-03-20 14:26:10
【问题描述】:
(因删除敏感信息而重新添加)
我们目前有 4 个延迟的作业工作者处理由我们的主应用程序创建的后台作业。这些都是通过新贵脚本与它们自己的实例一起生成的。我们希望这 4 名工作人员同时工作,但是他们现在正在等待对方完成,然后再处理另一项工作。这导致我们的作业池中出现大量积压,因为本质上一次只运行 1 个作业,而不是期望的 4 个。
我尝试过但无济于事的事情:
- 重启工作器
- 重启服务器(延迟作业和数据库服务器)
- 增加工人数量
- 在不同的池中为不同的作业队列运行工作器
- 使用两种语法 (
script/delayed_job start&bundle exec rake jobs:work) 生成工人
这里有什么我们遗漏的吗?我们怎样才能让工作人员再次并行运行?提前致谢。
Upstart 脚本(使用不同的索引运行 4 次):
instance $index
script
# this script runs in /bin/sh by default
# respawn as bash so we can source in rvm
exec /bin/bash <<'EOT'
# rvm
source /home/user/.rvm/scripts/rvm
cd /home/foo/bar/current
exec /usr/bin/env RAILS_ENV=production bundle exec rake jobs:work
EOT
end script
- Ruby 版本:2.3.1
- Rails 版本:4.2.6
- 延迟作业版本:4.1.2
- Ubuntu 版本:14.04.4 LTS
- 新贵版本:1.12.1
- 数据库:MariaDB 10.1.21
【问题讨论】:
-
我们最终完全解雇了延迟工作,转而支持 Sidekiq。抱歉,我无法提出修复建议。
标签: ruby-on-rails ruby delayed-job upstart