延迟的工作人员没有并行运行

时间:2017-03-20 14:26:10

标签: ruby-on-rails ruby delayed-job upstart

(由于删除敏感信息而重新添加)

我们目前有4名延迟的工作人员处理由我们的主要应用程序创建的后台工作。这些都是通过upstart脚本生成自己的实例。我们希望这4个工人同时工作,但他们现在正在等待彼此完成,然后才能处理另一个工作。这导致我们的工作池积压很多,因为实际上只有一项工作是一次性运行而不是期望的4.

我尝试过但无济于事的事情:

  • 重新启动工作人员
  • 重新启动服务器(延迟作业和数据库服务器)
  • 增加工人数量
  • 在不同的池中为不同的作业队列运行工作程序
  • 具有两种语法(script/delayed_job start& bundle exec rake jobs:work
  • 的Spawn工作者

我们在这里缺少什么东西吗?我们怎样才能让工人再次并行运行?提前谢谢。

Upstart Script(使用不同的索引运行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
  • Upstart版本:1.12.1
  • 数据库:MariaDB 10.1.21

1 个答案:

答案 0 :(得分:0)

对以下陈述进行更正 - 我最近在AWS上学习并实施了delayed_jobs。

在PROD中我按照https://github.com/collectiveidea/delayed_job使用bin / delayed_job和daemons gem

我的应用程序在AWS上,因此启动/重启命令为:

<BrowserRouter>

rake jobs:工作通常用于从我阅读的各种文章中启动开发环境中的工作者。

要进一步解决问题,请尝试在rails控制台中执行此操作:

su -s /bin/bash -c "bundle exec bin/delayed_job -n 2 --pid-dir=$EB_APP_PIDS_DIR restart" $EB_APP_USER

并检查作业是否得到更快处理。

要尝试的另一件事: 通过您通常使用的脚本停止所有工作人员。 然后做

Delayed::Worker.new

查看所有工作进程是否实际被杀死。 如果工作者系统进程仍然处于闲置状态,则必须手动终止这些系统进程。 然后重新启动工作人员并检查行为是否存在差异。