2017-02-23 2 views
0

私はJRubyとRailsのパフォーマンスの問題を多くの運をせずに診断しようとしています。遅い基本操作JRuby rakeタスク

私は基本的に、JRuby on Rails 5アプリケーションを用意しています。このアプリケーションは、レーキタスクでプロセスを開始します。レーキタスクのいくつかをテストするとき、MRIルビーで書かれた以前のスクリプトと比較して大幅に減速し、bundle exec ruby <script>コールを使用して実行しました。

レーキタスクのコンテキストでの文字列、配列、数値などの基本操作は、5〜6倍遅くなります。

jruby -G performance_test.rb 

:これを実行している間

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) 

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 

これらの結果を生成し、例えば、この簡単なテストを受けますperformance_test.rbは次のとおりです。私が利用可能であり、任意の運なしでこの上の情報の検索、ほぼすべてのJVMとJRubyのオプションを試してみた

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) 

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 

は私にこれらの結果を提供します。私がこの根本的な原因に遭遇し、問題を解決する方法を知ることができれば素晴らしいだろう。

答えて

0

あなたはJRubyのバグとしてそれを提出した場合は、おそらくそれは本当に私はあなたの番号はJRubyの1.7の下でおそらくある、またはJRubyの初期のバージョンと信じ

:-)バグではありませんにもかかわらず、我々の注意は良くなるだろうJITは独立してブロックをコンパイルしませんでした。ここではJRuby 9Kマスター(9.1.8.0)の下で私の結果です:

~/projects/jruby/tmp $ jruby performance_test.rb 
Rehearsal ------------------------------------------ 
double 3.180000 0.130000 3.310000 ( 2.801371) 
--------------------------------- total: 3.310000sec 

      user  system  total  real 
double 2.740000 0.030000 2.770000 ( 2.700693) 

~/projects/jruby/tmp $ rake performance_test:start 
Rehearsal ------------------------------------------ 
double 3.890000 0.110000 4.000000 ( 3.499264) 
--------------------------------- total: 4.000000sec 

      user  system  total  real 
double 3.430000 0.040000 3.470000 ( 3.382129) 

はレーキ数字は少し遅いですが、あなたの例のように遅く5倍ません。

JRuby 1.7.xで動作している場合は、-X + CをJRuby(JRUBY_OPTS = -X + C)に渡してすべてのファイルを強制的にコンパイルすることができますが、 。

+0

Hey Charles!これを見て時間をとってくれてありがとう。私はJRuby 9.1.7.0と一緒に走りました。結果は間違いなく私が期待していたものと一致しています。 PS私はバグとして提出しただろうが、それはそれのための適切な場所のように見えなかった:) –

関連する問題