0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[検証] rails runner はやはり遅かった

Posted at

概要

バッチ処理の実行環境について、チーム内で議論しました。

その際、「rails runnerRails実行環境を毎回読み込むので遅い」とのコメントがありましたので、実際に検証することにしました。

スクリプトの準備

まず、共通で使用するスクリプトを作成します。

  • 1から1,000,000までの整数の合計を計算し、処理にかかった時間を取得
  • 上記を複数回実行して平均時間を計測する

benchmark_task.rb

def perform_task
  sum = 0
  (1..1_000_000).each { |i| sum += i }
  sum
end

if __FILE__ == $0
  iterations = 10
  total_time = 0.0

  iterations.times do
    start_time = Time.now
    sum = perform_task
    end_time = Time.now
    elapsed_time = end_time - start_time
    total_time += elapsed_time
    puts "Iteration: #{sum}, Time: #{elapsed_time} seconds"
  end

  average_time = total_time / iterations
  puts "Average Elapsed Time: #{average_time} seconds"
end

ruby コマンドでの実行

Ruby環境でスクリプトを実行します。

ruby benchmark_task.rb

実行結果

Iteration: 500000500000, Time: 0.082677 seconds
Iteration: 500000500000, Time: 0.074426 seconds
Iteration: 500000500000, Time: 0.0732 seconds
Iteration: 500000500000, Time: 0.077007 seconds
Iteration: 500000500000, Time: 0.082132 seconds
Iteration: 500000500000, Time: 0.076183 seconds
Iteration: 500000500000, Time: 0.071092 seconds
Iteration: 500000500000, Time: 0.072957 seconds
Iteration: 500000500000, Time: 0.077457 seconds
Iteration: 500000500000, Time: 0.076813 seconds
Average Elapsed Time: 0.0763944 seconds

rails runner0.0763944 seconds よりも遅くなるか検証します。

Rails Runner での実行

rails runnerで同じスクリプトを実行します。

rails runner benchmark_task.rb

実行結果

Iteration: 500000500000, Time: 0.124216 seconds
Iteration: 500000500000, Time: 0.110869 seconds
Iteration: 500000500000, Time: 0.109642 seconds
Iteration: 500000500000, Time: 0.132782 seconds
Iteration: 500000500000, Time: 0.118581 seconds
Iteration: 500000500000, Time: 0.16234 seconds
Iteration: 500000500000, Time: 0.113434 seconds
Iteration: 500000500000, Time: 0.10714 seconds
Iteration: 500000500000, Time: 0.106049 seconds
Iteration: 500000500000, Time: 0.091899 seconds
Average Elapsed Time: 0.1176952 seconds

確かに少し遅いですね...

まとめ

Railsの環境初期化によるオーバーヘッドで
ruby コマンドと比較すると、少し遅くなっていますね。

Rails環境を読み込む必要がない場合はRails runnerの利用は避けるべきですね。
上記理由でcron内で複数のrails runnerを使用していましたが、テコ入れしました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?