Phusion Passenger の 2.0.2 がリリースされたということで、さっそく試してみた。
マシンは DELL SC440、OS は CentOS i386 です。
まず、Passenger をインストールする前に必要な ruby のパッケージをインストールする。
- $ sudo /usr/bin/yum -y install ruby ruby-rdoc ruby-devel
- $ /bin/mv rubygems.spec ~/rpm/SPECS
- $ /bin/mv rubygems-prefix.prefix ~/rpm/SOURCES
- $ /usr/bin/rpmbuild -ba ~/rpm/SPECS/rubygems.spec
gem から、rails と passenger をインストールして確認する。
- $ /usr/bin/sudo gem install passenger
- $ /usr/bin/gem list –local
- $ sudo /usr/bin/yum -y install httpd-devel
- $ sudo /usr/bin/passenger-install-apache2-module
——————————————–
The Apache 2 module was successfully installed.
Please edit your Apache configuration file, and add these lines:
LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-2.0.2/ext/apache2/mod_passenger.so
PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-2.0.2
PassengerRuby /usr/bin/ruby
After you restart Apache, you are ready to deploy any number of Ruby on Rails
applications on Apache, without any further Ruby on Rails-specific
configuration!
Press ENTER to continue.
そして、テスト用の rails 2.1.0 のアプリケーションを作る。
- $ /usr/bin/rails ~/sample
LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-2.0.2/ext/apac
he2/mod_passenger.so
PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-2.0.2
PassengerRuby /usr/bin/ruby
ServerName sample.example.com
DocumentRoot /home/test/sample/public
RackEnv production
設定して、Apache を起動したら、ローカルから動作確認する。確認がとれたら、すこしベンチマークを計測してみる。まず、ローカルから ab コマンドを計測してみる。ちなみに $HOME ディレクトリで実行するには $HOME ディレクトリのパーミッションを 755 に変更しておく必要がある。
- $ curl localhost
- $ ab -c 40 -n 10000 http://localhost/
Concurrency Level: 40
Time taken for tests: 2.458972 seconds
Complete requests: 10000
Failed requests: 0
Write errors: 0
Total transferred: 76581216 bytes
HTML transferred: 73909080 bytes
Requests per second: 4066.74 [#/sec] (mean)
Time per request: 9.836 [ms] (mean)
Time per request: 0.246 [ms] (mean, across all concurrent requests)
Transfer rate: 30413.52 [Kbytes/sec] received
そして、外部から LVS(NAT) + VRRP 経由でアクセスした結果は次のとおり。リアルサーバは、まったく同じスペック構成のサーバ2台。ab コマンドを実行しているときの、リアルサーバのロードアベレージは 0.00 だった。
Concurrency Level: 40
Time taken for tests: 69.353809 seconds
Complete requests: 10000
Failed requests: 0
Write errors: 0
Total transferred: 76534825 bytes
HTML transferred: 73869030 bytes
Requests per second: 144.19 [#/sec] (mean)
Time per request: 277.415 [ms] (mean)
Time per request: 6.935 [ms] (mean, across all concurrent requests)
Transfer rate: 1077.68 [Kbytes/sec] received
かなり回線の影響があることが分かった。
次に Apache の不要なモジュールをすべてはずして、ローカルから再度実験してみた。
Concurrency Level: 40
Time taken for tests: 2.390891 seconds
Complete requests: 10000
Failed requests: 0
Write errors: 0
Total transferred: 76565912 bytes
HTML transferred: 73894310 bytes
Requests per second: 4182.54 [#/sec] (mean)
Time per request: 9.564 [ms] (mean)
Time per request: 0.239 [ms] (mean, across all concurrent requests)
Transfer rate: 31273.28 [Kbytes/sec] received
そんなに変化はない、次に worker のパラメータを次のように変更して、同じくローカルから試してみた。worker のパラメータを変更するときは、必ず stop してから start する。
Concurrency Level: 40
Time taken for tests: 2.333074 seconds
Complete requests: 10000
Failed requests: 0
Write errors: 0
Total transferred: 76520000 bytes
HTML transferred: 73850000 bytes
Requests per second: 4286.19 [#/sec] (mean)
Time per request: 9.332 [ms] (mean)
Time per request: 0.233 [ms] (mean, across all concurrent requests)
Transfer rate: 32028.99 [Kbytes/sec] received
これはそんなには変わらない。
この状態で LVS 経由で外から試してみた結果は、次のとおり。
Concurrency Level: 40
Time taken for tests: 73.91778 seconds
Complete requests: 10000
Failed requests: 0
Write errors: 0
Total transferred: 76528276 bytes
HTML transferred: 73862686 bytes
Requests per second: 136.81 [#/sec] (mean)
Time per request: 292.367 [ms] (mean)
Time per request: 7.309 [ms] (mean, across all concurrent requests)
Transfer rate: 1022.47 [Kbytes/sec] received
そんなに変化はなかった。
しかし、試験しているときに httpd プロセスが落ちることがなかったので、passenger はかなり使えそう。
lighttpd との比較をしてみたかったが、今日のところはここまでにしておく。
さぁ、ROR をはじめよう!









