Когда более 20000 расписаний, регистрация расписывается медленно

Я построил динамический веб-планировщик с планировщиком rufus. Работает около 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. зарегистрировать работу и немедленно приостановить ее и возобновить после завершения регистрации. (373secs)
  2. создавать новый планировщик rufus каждые 10000 заданий ( 341сек) - отключать синглтон
  3. создать 4 планировщика rufus и распределить между ними задания.. ( 311 сек) - отключить синглтон

1 ответ

Решение

Rufus-планировщик предназначен для работы в средах, где используются потоки. Чтобы предотвратить конфликты, когда два потока планируют одновременно, существует мьютекс, "покрывающий" планирование.

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

Как вы можете видеть, есть также проверка, чтобы определить, запланировано ли уже задание.

Есть ли способ ускорить это?

Отправьте вопрос по адресу https://github.com/jmettraux/rufus-scheduler/issues со ссылкой на этот вопрос Stackru, и вы получите помощь. Не забудьте указать информацию, которую я запрашивал, в комментариях выше.

С наилучшими пожеланиями.

ОБНОВИТЬ

Я проверил на своем MacBook и результаты здесь: https://gist.github.com/jmettraux/b3f2bacb2a59627aea00

Я получаю от 13 с (Руби 2.1) до 37 с (Руби 1.9). JRuby часы в 16 с.

Руфус-планировщик 3.2.0 пред.

Другие вопросы по тегам