ruby - 当超过 20000 个时间表时,注册时间表会变慢

标签 ruby rufus-scheduler

我使用 rufus 调度程序构建了一个动态 Web 接口(interface)调度程序。大约有 38000 个作业在运行。运行作业没有问题。然而,向 rufus 注册工作太慢了。注册 38000 个职位大约需要 6 分钟(355 秒)。

有什么办法可以加速吗?我的环境如下..

OS: RHEL 2.6.32-504.16.2.el6.x86_64
Machine: 16 core, 16G
Rufus scheduler: v3.1.0, max thread 100, as singleton
jruby: v1.7.19 (1.9.3p551)
sinatra: v1.4.6 with puma -t 8:8
jruby option: -J-Xmx10240m -J-Xms2048m -J-server

我尝试了几种修改。但对总时间没有太大影响。

  1. 注册一个工作并立即暂停,注册完成后继续。 (373 秒)
  2. 每 10000 个作业(341 秒)实例化一个新的 rufus 调度程序 - 禁用单例
  3. 实例化 4 个 rufus 调度程序并向它们分配作业..(311 秒)- 禁用单例

最佳答案

Rufus-scheduler 旨在在使用线程的环境中运行。为了防止两个线程同时调度时发生冲突,有一个互斥量“覆盖”调度。

https://github.com/jmettraux/rufus-scheduler/blob/f859e31339bd78330d88f7cee7854d896ada381e/lib/rufus/scheduler.rb#L205 https://github.com/jmettraux/rufus-scheduler/blob/f859e31339bd78330d88f7cee7854d896ada381e/lib/rufus/scheduler.rb#L637 https://github.com/jmettraux/rufus-scheduler/blob/f859e31339bd78330d88f7cee7854d896ada381e/lib/rufus/scheduler/job_array.rb#L44

如您所见,还有一个检查以查看是否已经以某种方式安排了作业。

Is there any way to accelerate this?

https://github.com/jmettraux/rufus-scheduler/issues 提交问题返回此 StackOverflow 问题的链接,您将获得帮助。不要忘记在上面的评论中包含我要求的信息。

最好的问候。

更新

我在我的 MacBook 上进行了测试,结果如下:https://gist.github.com/jmettraux/b3f2bacb2a59627aea00

我得到 13s (Ruby 2.1) 和 37s (Ruby 1.9) 之间。 JRuby 时钟为 16 秒。

Rufus-scheduler 3.2.0 pre.

关于ruby - 当超过 20000 个时间表时,注册时间表会变慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34446354/

相关文章:

ruby-on-rails - 我的应用程序在 Heroku 上关闭,运行 "heroku run rails test"时没有错误,但运行 "heroku run rails console"时出现许多错误

heroku - 尽管使用锁,Rufus-scheduler 还是调度了两次

ruby - rufus-scheduler 和 cron 有什么区别?

ruby-on-rails - Rufus cron 调度在 jetty 服务器上不起作用

ruby-on-rails - 让 rufus-scheduler 在 Heroku 上工作

ruby-on-rails - rails : rename globalize column

ruby - 绝对初学者的单元测试 - 我正在使用 Ruby

python - 如何将独立的 Python 脚本集成到 Rails 应用程序中?

ruby-on-rails-3 - 如何在后台与 Rails 应用程序一起运行调度程序?

ruby-on-rails - ActionController::ParameterMissing:缺少参数或值为空: