概要

メモリ使用量を結構削減できるという Ruby Enterprise Edition
なんと\オープンソース!/
1.8.7ベースのものが最近公開されたというのでインストールしてみる

ソースファイルの取得

ここからソースをダウンロードして、適当なディレクトリに展開する
Ruby Enterprise Edition

patchを当てる(fedora 12の場合)

fedora 12 だと Ruby のコンパイルでこけるのでpatchを当てる
http://redmine.ruby-lang.org/issues/show/2022

patchの当て方を知らなかったので見よう見まねで頑張った!
下記のようなdiffの結果を適当なファイル名で保存(ruby-enterprise-1.8.7-2009.10/ext/openssl/ossl.c.patch)


Index: ext/openssl/ossl.c
===================================================================
--- ext/openssl/ossl.c  (revision 24721)
+++ ext/openssl/ossl.c  (working copy)
@@ -93,5 +93,5 @@ ossl_x509_ary2sk(VALUE ary)
 #define OSSL_IMPL_SK2ARY(name, type)           
 VALUE                      
-ossl_##name##_sk2ary(STACK *sk)            
+ossl_##name##_sk2ary(STACK_OF(type) *sk)   
 {                      
     type *t;                   
@@ -103,5 +103,5 @@ ossl_##name##_sk2ary(STACK *sk)         
    return Qnil;                
     }                      
-    num = sk_num(sk);              
+    num = sk_##type##_num(sk);         
     if (num < 0) {              
    OSSL_Debug("items in sk < -1???"); 
@@ -111,5 +111,5 @@ ossl_##name##_sk2ary(STACK *sk)         
                        
     for (i=0; i<num; i++) {         
-   t = (type *)sk_value(sk, i);        
+   t = sk_##type##_value(sk, i);       
    rb_ary_push(ary, ossl_##name##_new(t)); 
     }                      

(以下略)

patch というコマンドにファイルを渡せば勝手にマージしてくれるぽい


# patch < ext/openssl/ossl.c.patch

なんか一部当たらないっぽいけど動いたので放置

インストーラの実行

あとはインストーラを実行すれば勝手にインストールしてくれる
デフォルトだと /opt/ruby-enterprise-1.8.7-2009.10/ にインストールされる


# ruby ruby-enterprise-1.8.7-2009.10/installer.rb

既存環境の置き換え

gem list で既存のインストール済みgemを取得しておく


# gem list

*** LOCAL GEMS ***

actionmailer (2.3.4)
actionpack (2.3.4)
activerecord (2.3.4)
(以下略)

/usr/bin/ruby, /usr/bin/gem にシンボリックリンクをはる
既存のものは適当な名前にリネームしておく


# mv /usr/bin/ruby /usr/bin/ruby186
# mv /usr/bin/gem /usr/bin/gem186
# ln -s /opt/ruby-enterprise-1.8.7-2009.10/bin/ruby /usr/bin/ruby
# ln -s /opt/ruby-enterprise-1.8.7-2009.10/bin/gem /usr/bin/gem

installer.rb で指示されたとおり、httpd.conf の mod_passenger の設定を書き換える


root@localhost# cat /etc/httpd/conf.d/passenger.conf
LoadModule passenger_module /opt/ruby-enterprise-1.8.7-2009.10/lib/ruby/gems/1.8/gems/passenger-2.2.7/ext/apache2/mod_passenger.so
PassengerRoot /opt/ruby-enterprise-1.8.7-2009.10/lib/ruby/gems/1.8/gems/passenger-2.2.7
PassengerRuby /opt/ruby-enterprise-1.8.7-2009.10/bin/ruby

結果

ruby 1.8.6


---- Passenger processes -----
PID    VMSize   Private  Name
------------------------------
1928   11.2 MB  0.3 MB   /usr/lib/ruby/gems/1.8/gems/passenger-2.2.5/ext/apache2/ApplicationPoolServerExecutable 0 /usr/lib/ruby/gems/1.8/gems/passenger-2.2.5/bin/passenger-spawn-server  /usr/bin/ruby  /tmp/passenger.1895
1929   17.1 MB  5.3 MB   Passenger spawn server
12178  48.0 MB  29.6 MB  Passenger ApplicationSpawner: /var/www/app/contactor/current
### Processes: 3
### Total private dirty RSS: 35.22 MB

ruby enterprise edition 1.8.7


---- Passenger processes -----
PID    VMSize   Private  Name
------------------------------
11783  6.9 MB   0.2 MB   /opt/ruby-enterprise-1.8.7-2009.10/lib/ruby/gems/1.8/gems/passenger-2.2.7/ext/apache2/ApplicationPoolServerExecutable 0 /opt/ruby-enterprise-1.8.7-2009.10/lib/ruby/gems/1.8/gems/passenger-2.2.7/bin/passenger-spawn-server  /opt/ruby-enterprise-1.8.7-2009.10/bin/ruby  /tmp/passenger.11755
11784  23.7 MB  6.3 MB   Passenger spawn server
12065  56.2 MB  2.3 MB   Passenger ApplicationSpawner: /var/www/app/contactor/current
12095  56.2 MB  3.2 MB   Rails: /var/www/app/contactor/current
### Processes: 4
### Total private dirty RSS: 12.04 MB

環境が違うので比較できないけれど、実メモリ使用量は大分減ったぽい