我正在尝试使用JRuby和Rails来解决性能问题而没有太多运气。
基本上,我有一个JRuby on Rails 5应用程序,它将启动rake任务中的进程。在测试一些rake任务时,我们注意到与我们使用的旧脚本相比显着减速,这些脚本是用MRI ruby编写的,并使用bundle exec ruby <script>
调用运行。
rake任务上下文中对字符串,数组,数字等的基本操作慢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选项,并且没有任何运气就搜索了这方面的信息。如果我能找到解决这个问题的根本原因以及如何解决这个问题,那将会很棒。