Я пытаюсь диагностировать проблемы с работой с JRuby и Rails без большой удачи.Медленные основные операции JRuby rake task
По сути, у меня есть приложение JRuby on Rails 5, которое будет запускать процессы в рейк-задачах. При тестировании некоторых рейк-задач мы заметили значительное замедление по сравнению с нашими старыми сценариями, которые мы использовали, которые были написаны в рубине MRI и выполнялись с использованием вызова bundle exec ruby <script>
.
Основные операции над строками, массивами, числами и т. Д. В контексте задачи рейка в 5-6 раз медленнее. Например, возьмем этот простой тест:
bin/rake performance_test:start
где performance_test.rake является:
namespace :performance_test do
desc 'Test Performance'
task :start do
Benchmark.bmbm do |x|
x.report ('double') do
100_000_000.times do
"Hello world!"
end
end
end
end
end
производит эти результаты:
Rehearsal ------------------------------------------
double 27.570000 0.630000 28.200000 (27.714908)
-------------------------------- total: 28.200000sec
user system total real
double 28.050000 0.750000 28.800000 (29.864897)
во время работы этого:
jruby -G performance_test.rb
где performance_test.rb:
require 'require_all'
require 'bundler'
Bundler.require(:default)
require_all Dir.glob('lib/extensions/*.rb')
Benchmark.bmbm do |x|
x.report ('double') do
100_000_000.times do
"Hello world!"
end
end
end
дает мне эти результаты:
Rehearsal ------------------------------------------
double 4.930000 0.240000 5.170000 ( 5.639570)
--------------------------------- total: 5.170000sec
user system total real
double 4.420000 0.180000 4.600000 ( 5.538717)
Я пробовал почти каждый JVM и JRuby вариант, который доступен и искали информацию об этом без каких-либо удачи. Было бы здорово, если бы я смог найти основную причину этого и как бы я решил исправить проблему.
Эй, Чарльз! Большое спасибо за то, что нашли время, чтобы посмотреть на это. Я работал с JRuby 9.1.7.0, и результаты, безусловно, соответствовали тому, что я ожидал. PS Я бы подал в качестве ошибки, но он не казался правильным местом для нее :) –