性能検証!速いのはどっち?
試験項目と試験方法
今回、Webサーバーの性能測定をするにあたり、以下の2種類のベンチマークツールを利用して検証を行いました。これらのベンチマークツールを、サーバー機器とは別のきょう体のクライアント機器にインストールして使用します。
・ab(Apache Bench)
・http_load
1つ目の「ab」はApacheに標準で付属しているベンチマークツールです。主なオプションとして同時接続数や発行リクエスト数、URLを指定して実行することで、リクエスト処理の成功/失敗数、1秒間で処理したリクエスト数(Requests per second)、転送速度や接続時間の内訳なども計測することが可能です。
2つ目の「http_load」はACME Laboratoriesのhttp_loadのページ(http://www.acme.com/software/http_load/)にて配布されているベンチマークツールで、abと同様に同時接続数や発行リクエスト数、URL(複数可)を指定して実行できます。結果として得られる項目はabより少ないものの、複数のURLに対してテストすることが可能です。
上記のソフトウエアを使い、検証対象の各Webサーバーソフトウエアに、3種類のサイズ(3KB、100KB、3MB)のファイルを配置し、それぞれのファイルに対して、同時接続数に変化を加えながらリクエストを発行し、リクエスト処理量を検証します。
なお、今回はWebサーバーソフトウエアの性能を計測するため、静的ファイルのみの配信を対象としています。
試験項目を図2の上にまとめています。例えば、試験項目1を実施する場合は、adでは以下のコマンドを実行します。
$ ab -c 10 -n 1000 [URL]
同様にhttp_loadでは以下のコマンドを実行します。
$ http_load -verbose -parallel 10 -fetches 1000 [URLを指定したファイル名]
なお、試験項目ごとに試験を3回繰り返し実施し、それぞれの平均値を結果としました。
abを利用した試験結果
abを利用した検証を実施した結果を図2の下のグラフにまとめました。検証結果について解説していきましょう。
最初に試験項目1~3の3KBのファイルに対してリクエストを発行した場合についての結果を見ていきます。
Webサイトであれば、アイコン画像やJavaScript、CSSなどの比較的小さなファイルを多量に配信することも多いでしょう。それらを想定したこの試験では、図2のグラフから、3KB程度の小さなファイルの配信には軽量サーバーであるlighttpdがApacheよりも優れていることがわかります。
1秒間で処理したリクエスト数(Requests per second)で、Apache(prefork)と比較すると、同時接続数が10の場合で約1.44倍、同時接続数100の場合で約1.55倍、同時接続数1000の場合で約1.78倍の処理量向上となっています。
なお、Apache(prefork)とApache(worker)では、誤差のレベルの違いしか出ず、ほぼ同等の性能であることがわかります。
続いて、試験項目4~8の100KBおよび3MBのファイルに対してリクエストを発行した場合についての結果を見ていきましょう。
これらの2種類のファイルに対して同様の試験を行ったところ、図2に示すように、100KBのファイルに対して同時接続数1000で実施した場合は、lighttpdがApache(prefork)に比べ、リクエスト処理量が約1.25倍高いという結果でしたが、そのほかはApacheおよびlighttpdともに、それほど大きな差は出ませんでした。
この場合、上記に挙げた「100KBのファイルに対して同時接続数1000で実施したケース」を除いた試験項目では、性能試験を行った際の転送量(Transfer rate)が、約110MB/秒(約880Mbps)となっており、ネットワークスループットの限界点に到達しているものと考えられます。
100KBおよび3MBのファイルに対しての試験については、ネットワークがボトルネックとなってしまっているため、Webサーバーの性能を比較する場合、この試験結果は適切ではありません。
この結果より、近ごろのハードウエアスペックの著しい進歩を考慮すると、100KB以上の大きなサイズのファイルを、比較的多量に配信する場合は、Webサーバーの性能限界点よりも、ネットワークの通信帯域がボトルネックになりそうだと言えるでしょう。
なお、3MBのファイルに対してリクエストを発行した場合も、上記と同じ理由により、どのWebサーバーソフトウエアも結果はほぼ同じだったため、図2から結果を省いています。
次ページでは、abとは別のベンチマークツールであるhttp_loadを使った検証結果を紹介します。