2010-05-12
Ubuntu10.04 で Ruby Enterprise Edition を使う
サーバ | |
Ruby Enterprise Edition(REE)とは
Ruby Enterprise Edition(REE) は Ruby 1.8.x の評価器(主にGC)を修正することで、メモリ周辺の性能を大幅に改善したもの。おおざっぱには次の特徴を持つ。
- メモリアロケータに tcmalloc(google-perftoolsに含まれる)を採用し高速にメモリを確保
- Mark & Sweep なガベージコレクタにBitmap markingを導入した
- Copy-on-write に優しくなり、メモリ消費量が低減
- マーク処理が高速化
- ただし単純な実行速度自体には悪影響を与える場合もある
- トータルでは高速化している模様
というわけで、メモリを大量に消費しがちなRailsアプリケーションの実行環境として採用されることが増えている(New York Timesとか37signalsが有名)。
Ubuntu10.04 に REE をインストールするメモ。
普通はtarball からコンパイルするんですけど、Ubuntuにはもうバイナリパッケージが提供されています。素敵すぎです。
http://www.rubyenterpriseedition.com/download.html
$ wget http://rubyforge.org/frs/download.php/68718/ruby-enterprise_1.8.7-2010.01_i386.deb $ sudo dpkg -i ruby-enterprise_1.8.7-2010.01_i386.deb
これで /usr/local/bin/ruby に インストールされます。
$ /usr/local/bin/ruby -v ruby 1.8.7 (2009-12-24 patchlevel 248) [i686-linux], MBARI 0x8770, Ruby Enterprise Edition 2010.01
次にPassengerを再構築する必要があります。さっきのページに書いてあるとおりですね、親切!
$ sudo /usr/local/bin/passenger-install-apache2-module
:/etc/apache2/mods-avaiable/passenger.load LoadModule passenger_module /usr/local/lib/ruby/gems/1.8/gems/passenger-2.2.9/ext/apache2/mod_passenger.so :/etc/apache2/mods-avaiable/passenger.conf PassengerRoot /usr/local/lib/ruby/gems/1.8/gems/passenger-2.2.9 PassengerRuby /usr/local/bin/ruby
さらにREEは専用のgem環境が独立しています。よってRoRなアプリケーションが、既存のCRubyに依存したgemを参照しているとエラーを吐いて起動しなくなります。こんな感じ。
no such file to load -- mysql (MissingSourceFile)
aptで導入した libmysql-ruby1.8が不適切だとのお達し。なので、これを更新します。単にREE用のgemを使うだけですね。
$ sudo /usr/local/bin/gem install mysql
これでうまくいきました。
メモリ使用量の確認は passenger-memory-stats で行います。
$ sudo /usr/local/bin/passenger-memory-stats
CRuby の場合:
1989 80.6 MB 40.5 MB Passenger ApplicationSpawner: /var/rails/xxxx 1995 80.6 MB 40.5 MB Rails: /var/rails/xxxx
REE の場合:
3710 76.0 MB 26.8 MB Passenger ApplicationSpawner: /var/rails/xxxx 3712 76.0 MB 26.8 MB Rails: /var/rails/xxxx
条件が完全に同一ではないので目安程度だけど、公称通り33%削減されてます。CoWが有効に機能するということなら、プロセス数が増えるともっと効果的なのかなぁ?今のところ実行速度よりもメモリの方が重要な資源なので、この改善は非常に有り難いです。
- 172 http://symfoware.blog68.fc2.com/blog-entry-422.html
- 32 http://pipes.yahoo.com/pipes/pipe.info?_id=tDfBdGWF3RGl9XNm1L3fcQ
- 30 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rlz=1T4GGLL_jaJP357JP357&q=redmine+ubuntu+アップデート
- 23 http://www.google.co.jp/search?hl=ja&lr=lang_ja&tbs=lr:lang_1ja&q=passenger+startup+ubuntu&aq=f&aqi=&aql=&oq=&gs_rfai=
- 22 http://www.google.com/search?client=ubuntu&channel=fs&q=ubuntu10+mysql+gem&ie=utf-8&oe=utf-8
- 21 http://www.google.co.jp/search?q=9AA38DCD55BE302B&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja-JP-mac:official&hl=ja&client=firefox-a
- 17 http://pipes.yahoo.com/pipes/pipe.info?_id=5c957097ed152660234169b605fb3fa7
- 12 http://www.google.co.jp/search?q=RubyGem+version+error:+rack(1.1.0+not+~>+1.0.1)&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&hl=ja&client=firefox-a
- 11 http://pipes.yahoo.com/pipes/pipe.info?_id=12e453e301454b799b3ac6642aa089b5
- 11 http://www.google.co.jp/search?hl=ja&q=RubyGem+version+error:+rack(1.1.0+not+~>+1.0.1)&lr=lang_ja
