Rails-1.2.3、2.1.2、2.2.2、2.3 の性能の変遷 (render :text にて)

Rails-2.3 の RC1 をまだ触ってなかったので、インストールがてら試してみました。
render :text => "Hello World!" なアプリに対して、Apache Bench から負荷をかけ、スループットの平均 (5回計測し、最大と最小を除いて平均値を算出) をとっています。


2.1 に比べて 2.2 でスループット性能がかなり落ちたのが、2.3 RC1 では少し復活しているようですね。また、threadsafe オプションの効能はここではあまり見られませんでした。


# 1.x 系から 2.x 系は大きな飛躍がありましたが、Merb ベースとなる 3.x 系にも期待できると嬉しいですね。 :-p


結果

バージョン 平均値 [#/sec] すべての計測値 [#/sec]
Rails-2.3 RC1 377.75 350.03, 381.57, 375.1, 376.57, 381.83
Rails-2.3 RC1 (threadsafe!) 322.07 315.51, 320.87, 317.72, 327.63, 330.15
Rails-2.2.2 329.04 326.77, 335.3, 326.37, 328.55, 331.8
Rails-2.2.2 (threadsafe!) 333.12 336.42, 338.0, 337.36, 325.58, 276.85
Rails-2.1.2 440.97 435.08, 440.06, 445.48, 441.13, 441.72
Rails-1.2.3 59.86 79.98, 63.47, 58.56, 57.56, 56.1

環境

  • 処理系、ライブラリのバージョンは以下のとおり
% ruby186 -v
ruby 1.8.6 (2008-08-11 patchlevel 287) [i686-darwin9.6.0]

% gem list --local rails

*** LOCAL GEMS ***
rails (2.3.0, 2.2.2, 2.1.2, 1.2.3)
mongrel (1.1.5)
  • HelloWorld アプリ
% rails _x.x.x_ helloworld  # x.x.x には Rails のバージョン
% cd helloworld
% ruby186 script/generate controller tests
% vi app/controllers/tests_controller.rb
class TestsController < ApplicationController
  def index
    render :text => "Hello World!"
  end
end
a
% ruby186 script/server -e production
% curl http://127.0.0.1:3000/tests
Hello World!%

% ab -n 10000 -c 10 http://127.0.0.1:3000/tests