WEBサーバーを比較してみる

はじめまして、kaoruです。

ゆめみでは伝統的にWEBサービスを提供するにあたって、Apache HTTP Server+PHPというミドルウェア構成を利用してきました。

近年では単純な閲覧型のWEBサイトを越えて、SNSやコミュニティーサービスなど、ユーザーが自らリアルタイムに参加できるようなWEBサービスが一般的になってきています。このようなWEBサービスを提供するためには、膨大なトラフィックをリアルタイムに処理できるようなシステム構成が求められています。

 このような背景もあり、今回は今までよく使っていたApache HTTP Serverと最近よく目にするようになってきたnginxというWEBサーバーの基本的な性能を比較してみましたのでご紹介してみたいと思います。

なお、今回の性能の計測は簡易的なものであり、参考程度のものであることはご了承ください。

20100331.WEB-server-compara.gif

グラフの縦軸は1秒間あたりに処理したリクエスト数の平均、横軸は同時接続数で、localhostからApacheBenchを使って計測しました。上の3つはApache HTTP Serverで、configure時に指定するMPMオプションを、prefork, worker, eventと変えたものです。nginxは最近よく聞くようになったWEBサーバーです。Boost.AsioはC++のライブラリーで、非同期のネットワーク処理ができます。ライブラリーに付属しているサンプルプログラムを試してみました。

結果を見ると、Apache HTTP Serverよりもnginxはコネクション数にかかわらず性能が高いことが分かります。また、グラフからはわかりませんが、アーキテクチャーの違いからか、nginxの方がリソースの消費量が大幅に少なくなっているようです。Boost.Asioはライブラリーなので他のアプリケーションと単純な比較はできませんが、アプリケーションを実装するプラットフォームとしてはかなり高性能であると言えます。

今回は、手始めとして、固定の簡単なテキストファイルを取得する試験を行いました。動的にコンテンツを返さなければいけないかどうかや、使いたい機能によってもかわってきますが、nginxで必要なことができるなら、とても魅力的な選択肢になると思います。

今回の試験に用いたサーバーのスペックとアプリケーションのバージョンを挙げておきます。

Intel(R) Xeon(R) 2.33GHz (64bit, 8コア)
Linux 2.6.18 x86_64
Mem:   1048576k total
httpd-2.2.14
nginx-0.8.34
boost_1_42_0


Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 16271409 bytes) in /home/yumeco/www/prod/wp-includes/wp-db.php on line 1171