monolog

mod_mrubyをFreeBSDで動かそうとして詰まる

CombConfの発表が2日後に迫っているにも関わらず他の技術に手がでます。

組み込み向けのRubyであるmrubyをApacheに組み込めるようにした、mod_mrubyというものをFreeBSDで動かしてみようかと思って手を出したら大苦戦しました。

とりあえず動いたには動いたという状況ですが、簡単なメモとベンチマークを取ってみました。

2013/2/17追記
mod_mrubyの更新によって手順が変わりました⇒ mod_mruby on FreeBSD

導入はmod_mrubyのページと同じようにやればいいのかと思いきや、makeでエラーを吐いてしまいます。

どうもmrubyのRakefileがLinux向けのようで、makeをgmakeに書き換える必要があるようです。

mrubyは1回mod_mrubyをmakeをしないとRakefileが存在しないので注意です。

あとはWarningが出ますがとりあえずスルーして、make installすればApacheにモジュールが登録されます。
あとはhttpd.confに、

と書き加えれば普通にmrubyファイルが動くはずなのですが……

自分の環境(Freebsd 9.1-BETA1 amd64, Apache/2.2.23 Event MPM)な環境では、httpdを起動した直後からCPUをバカ食いする上、リクエストに全く応答しなくなるという状況に陥ってしまい、解決策が分からなくなりました。
そんなことをTwitterで呟いたら、mod_mrubyの作者である、matsumoto-rさんから

という指摘を頂きました。試しに(FreeBSD 9.0 i386, Apache/2.2.22 Prefork MPM)な旧サーバーで試したところ、何も問題がないかのように動きました。
どうもApache 2.2でEvent MPMをやるのはだめみたい……?

試しにどのくらい速いのか、mruby, FastCGIのRuby(mod_fcgid, 1.9.3p125), 静的ファイルの3つで比較してみました。

検証機のスペック: IBM ThinkCentre 8086-AGJ
CPU: Celeron D 330 2.66GHz
RAM: DDR-SDRAM 1GB
LAN: Gigabit Ethernet(Intel chip)

abの条件は下記の通り

結果:

  • mruby

Time taken for tests: 108.551 seconds
Requests per second: 921.23 [#/sec] (mean)
Time per request: 108.551 [ms] (mean)
Time per request: 1.086 [ms] (mean, across all concurrent requests)

  • Ruby(FastCGI)

Time taken for tests: 362.996 seconds
Failed requests: 109
Requests per second: 275.48 [#/sec] (mean)
Time per request: 362.996 [ms] (mean)
Time per request: 3.630 [ms] (mean, across all concurrent requests)

  • txt

Time taken for tests: 98.767 seconds
Requests per second: 1012.48 [#/sec] (mean)
Time per request: 98.767 [ms] (mean)
Time per request: 0.988 [ms] (mean, across all concurrent requests)

なんとmrubyが静的ファイルに迫る速度を出してました。すごい……

ちなみにmrubyが動かなかった方のメインサーバー(Core2 duo E6300@1.86Ghz, RAM512MB)ではRuby(FastCGI: mod_fcgid)で1857.93 [#/sec]とかいう値を叩きだしてました。
後日メインのサーバーの方もPreforkにして検証してみようかと思います。
いつになったらFreeBSD PortsにApache 2.4が来るのだろう……

そういえば、もう明後日に迫っていますが、CombConfに参加します!
内容は、「HTTPSを使わずに暗号化通信をしよう」でやる予定です。
出来るの………?(まだ検証してない

Share Button

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA