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