LoginSignup
6
6

More than 5 years have passed since last update.

Ruby 2.2.0でRailsは速くなるのか??軽くベンチマークしてみた

Last updated at Posted at 2014-12-27

はじめに

Ruby 2.2.0がリリースされましたね!
相変わらず納期厳守で感服します。

Ruby 2.2.0はRails 5で必須となるSymbolGCやインクリメンタルGCが実装されたり、おまけにjemallocが使えるようになってたりと速くなってそうな雰囲気です。

というわけでRailsを使って軽くベンチマークしてみました。

測定対象

今回測定対象としたのは、次の3つです。

  • Ruby 2.1.5
  • Ruby 2.2.0
  • Ruby 2.2.0 with jemalloc

ベンチマーク方法

RailsのアプリケーションにApache Benchをかけました。

ミドルウェア

アプリケーションサーバにはUnicorn、WebサーバにはNginxを使いました。

最初はRaptorを使おうとしてたんですが、まだ2.2.0に対応できていないようなのでやめました。
https://github.com/phusion/passenger/issues/1314

データベースにはPercona XtraDB Clusterを使いました。

アプリケーション

ベンチマークに使用したRailsのアプリはこちらです。
DBに書き込んで、書き込んだモデルをJSONとして返すだけのアプリです。

Railsのバージョンは4.1.4です。

Docker

環境の差異がなくなるようにアプリはDockerコンテナとして起動しました。
オフィシャルなRuby 2.2.0のイメージがなかったので、Rubyビルドするとこからイメージを作成しています。

インフラ

サーバはIDCFクラウドのVMを3台使用しました。

サーバ CPU Memory
アプリサーバ 0.8GHz x 1 1GB
DBサーバ 2.4GHz x 4 16GB
ベンチサーバ 2.6GHz x 2 4GB

すべてCentOS 7.0です。

システム構成図

ruby2.2.0_bench.001.png

結果

Request/Sec のグラフです。

スクリーンショット 2014-12-27 12.32.59.png

簡単なRailsアプリでは、2.1.5と2.2.0ではほぼ変わらず(微妙に2.2.0の方が遅い)という結果になってしまいました。
Rails 5に期待ですね。

jemallocさんは速い場合と遅い場合がありました。
有能さが確認されればjemallocが標準になるらしいです。

おわりに

軽いベンチマークでした。
結局速いのか遅いのかよくわからないという結果になってしまいました。
計測方法が適当なので、ちゃんとやれば変わりそうです。

2.2.0の方が速くなるパターンとかRails以外も計測してみたいですね。

(おまけ)アプリケーション起動方法

今回使用したRailsアプリはDockerhubにイメージを登録してるので、Dockerが動いていれば次のコマンドで起動できます。

$ docker run \
-e "DB_HOST=dbhost" \ # DBサーバのホスト or IP
-e "DB_USER=dbuser" \ # DBのユーザ
-e "DB_PASS=dbpass" \ # DBのパスワード
-e "SECRET_KEY_BASE=hogehoge" \  # Railsのsecret_key_base
-e "NEWRELIC_KEY=newrelic_key" \ # NewRelicのライセンスキー
-p 80:80 nownabe/rails_bench:2.2.0 # 2.1.5、2.2.0、2.2.0-jemallocのいずれか
6
6
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
6
6