Home > Apacheについて | 研究について > ngx_mrubyとmod_mrubyのパフォーマンス比較してみた

ngx_mrubyとmod_mrubyのパフォーマンス比較してみた


ngx_mrubyに対しても、mod_mrubyで実装していたような高速化アーキテクチャ(これとかこれ)を実装することができたので、どれくらいのパフォーマンスがでるのかをngx_mrubymod_mrubyで比較してみました。

mod_mrubyとngx_mrubyのインストール

gitからそれぞれのコードを落としてきて、以下のようにコンパイルしました。

mod_mruby

git clone git://github.com/matsumoto-r/mod_mruby.git
cd mod_mruby
git submodule init
git submodule update
cd mruby
git checkout master
rake
cd ..
./configure
make
sudo make install

ngx_mruby

git clone git://github.com/matsumoto-r/ngx_mruby.git
cd ngx_mruby
git submodule init
git submodule update
cd mruby
git checkout master
rake
cd ..
./configure --with-ngx-src-root=/usr/local/src/nginx-1.2.2 --with-ngx-config-opt="--prefix=/usr/local/nginx"
make
sudo make install

以上のようなコマンドでインストールしました。簡単ですね!

設定

それぞれ、confにmrubyを書くインライン機能に対応しているので以下のように設定を書きました。

mod_mruby

<IfModule prefork.c>
StartServers         40
MinSpareServers      40
MaxSpareServers      40
ServerLimit          40
MaxClients           40
MaxRequestsPerChild 0
</IfModule>

LoadModule mruby_module modules/mod_mruby.so
<Location /mruby>
    SetHandler mruby-native-script
    mrubyhandlercode "Apache.rputs 'hello mod_mruby world!'; Apache.return Apache::HTTP_OK;"
</Location>

ngx_mruby

worker_processes  4;

events {
    worker_connections  1024;
}

location /mruby {
    mruby_content_handler_code '
        Nginx.rputs "hello ngx_mruby world!"
        Nginx.return Nginx::NGX_HTTP_OK
    '
;
}

これで、それなりのチューニングになっているでしょう。同時接続数が100だからといって、プロセス数を100にしたりしないのが重要なポイントです。コンテキストスイッチはできるだけ少なくすることも忘れないようにしましょう。詳細は以前の記事を参考にして下さい

パフォーマンス比較

ではこれらに対して、以下のようなabコマンドで1秒間に処理できるリクエスト数を測定しました。検証環境はいつもと同じです。

experiment_hw

同時接続数100総接続数10万で負荷をかけました。

ab -k -c 100 -n 100000 http://example.jp/mruby

すると以下のような結果になりました。

  mod_mruby ngx_mruby
Requests per second[#/sec] 21964.87 50636.63
Time per request[ms] 4.546 1.945

ごっ5万超えだと!?ヒィっ、ngx_mruby早い!

最後に

以上のように、ngx_mrubyとmod_mrubyには大きなパフォーマンスの差が出てしまいました。といっても、これはnginxとApacheの差かもしれません。という意味ではngx_mrubyとmod_mrubyは各ソフトウェアの性能を最大限に活かせている(モジュールがボトルネックになっていないという意味では)と言えるかもしれません。

ただ、ApacheのeventMPMに対応させることで、mod_mrubyはもっと高速になるかもしれないので、そのあたりも実装継続していきたいと思います。参考までにeventMPMがチューニング次第では高速だった記事をここに置いていきます。

コメント:0

コメントフォーム
Remember personal info

CAPTCHA


トラックバック:0

このエントリーのトラックバックURL
http://blog.matsumoto-r.jp/wp-trackback.php?p=3206
Listed below are links to weblogs that reference
ngx_mrubyとmod_mrubyのパフォーマンス比較してみた from 人間とウェブの未来

Home > Apacheについて | 研究について > ngx_mrubyとmod_mrubyのパフォーマンス比較してみた

検索
フィード
メタ情報

Return to page top