Home > Apacheについて | Linux | 研究について > Apache 2.4.1のスループット評価(旧ApacheとNginxとのベンチマーク比較)

Apache 2.4.1のスループット評価(旧ApacheとNginxとのベンチマーク比較)


久々のApache HTTP Server 2.4.1という安定版がリリースされたので、早速ベンチマーク評価を行う。今回はevent_mpmのExperimentがとれて、晴れてデフォルトMPMになったのでそれを使ってみたい。

日本一(ひょっとすると世界一)早いApache 2.4.1 event_mpmのレビューを意識してみた。

はじめに

個人的にも、event_mpmが採用されたことに最も注目している。event_mpmは非同期型のIO処理をしていて、nginxに近いアーキテクチャをとっている。厳密には、nginxの非同期と比べた場合、nginxは徹底的にノンブロッキング(accept4を使う等)してworkerスレッドで次々と並列処理していくのに対し、event_mpmは一部の処理のみをノンブロッキングにしているため、時々workerスレッドをセッションが占有してしまうという意味で、nginxの徹底された並列処理には劣ると考えられる。

しかし、安定性に定評のあるApacheが久々に自信を持ってリリースした(2.4.1リリースまでの度重なる議論をMLで僕も見ていたので)ので、期待してしまう。

実験

まず、単純な静的ファイルへのリクエストの処理はnginxの方がは早いと予想できる。しかし、大量のアクセスがあった場合の安定性や性能劣化がWebサーバにとっては重要なファクターである。とにかく機能を落としせば単一のリクエストの処理は早くなるのは当たり前だからだ。

そこで、今回は新旧ApacheとNginxの静的コンテンツに対するスループット性能を比較してみた。クライアントサーバから静的コンテンツに対して、httperfを使って1秒間に複数のリクエストを行い、その数を変動させて、サーバ側が1秒間に返すことのできたレスポンス数を計測した。Apach 2.4.1(event_mpm)とApache 2.2.3(prefork_mpm)、Nginx1.0.12のスループットを比較した。

静的コンテンツは適当にこんなHTMLファイルを作成した。

実際に、httperfで測定する際のベンチマークスクリプトを載せておく。今回は、Request per Secondに注目した。それぞれ3つのWebサーバソフトウェアを80と8080と8888のポートでListenするようにした。

#!/bin/sh

RESULT='./result.txt'

for port in 80 8080 8888
do
    #for count in 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000
    #for count in 11000 12000 13000 14000 15000 16000 17000 18000 19000 20000
    for count in 21000 22000 23000 24000 25000 26000 27000 28000 29000 30000
    do
        echo -n "$port $count " >> $RESULT
        httperf --rate $count --num-conns 25000 --server ipaddr --port $port --uri=/test.html ¦ grep "Request rate:" >> $RESULT.$port
        sleep 60
    done
done

例えば、1000requests/secに対して、1000responses/sec出ていれば、スループットは100%だといえる。

Apacheやnginxの各設定はデフォルトの設定を用いており、評価には以下のようなスペックのハードウェアを用いた。

結果

それでは計測結果である。

 

 

赤色の数値はスループットが100%出ていない値を示している。

グラフを見て頂くとわかる通り、スループット性能はなんとApaceh2.4.1のevent_mpmが一番優秀で、次いでnginxであった。nginxは19000requests/sec当たりでガクっと処理性能が低下しているが、Apache2.4.1は24000requests/secまで100%のスループットを発揮できている。これは個人的に素晴らしいと思った。

また、Apache2.2.3のpreforkがrateを増やせば増やすほど、かなり不安定(ある意味安定)な挙動をしていた。

簡単な考察

この挙動の考察は、とりあえず日本一早く検証結果を公開したいという意味で、きちんと考察していないのが正直なところだ。

preforkのデフォルトの設定は、MaxRequestsPerChildが4000になっているため、その設定によって定期的にプロセスの生成・破棄が生じ、スループットが低下したのではないかと、まずは予想している。

また、nginxのスループットがガクっと落ちるところまでは、単位時間当たりの処理速度はnginxが速かったように思う。きちんと処理にかかった時間で処理数を割れば、速度が計測できたと思うが、今回は省略している。

いずれにせよ、Apache2.4.1は大きく性能改善がなされ、大量のアクセスが来た場合の処理耐性はnginxよりも良いということになる。

一旦は、このようなスループットに関する簡単な評価にとどまるが、ある程度の今後の性能評価に参考になる値は得られたのではないかと考えている。

コメント:0

コメントフォーム
Remember personal info

CAPTCHA


トラックバック:6

このエントリーのトラックバックURL
http://blog.matsumoto-r.jp/wp-trackback.php?p=1812
Listed below are links to weblogs that reference
Apache 2.4.1のスループット評価(旧ApacheとNginxとのベンチマーク比較) from 人間とウェブの未来
pingback from Apache メジャーアップデート | チラシの裏的ななにか 12-02-23 (木) 1:35

[…] http://www.apache.jp/ それで興味深い記事を見つけたので取り上げてみる。 http://blog.matsumoto-r.jp/?p=1812 このなかでevent mpmについて述べられているんだけど、event […]

pingback from 人間とウェブの未来 » 引き続き Apache 2.4.1のスループット評価(旧Apacheと動的コンテンツのベンチマーク比較) 12-02-24 (金) 22:01

[…] 前回の記事「Apache 2.4.1のスループット評価(旧ApacheとNginxとのベンチマーク比較)」を非常に多くの方に見て頂いており、こういう情報が重要なんだなぁ、としみじみ思った。多くのオープンソースを使わしてもらっているので、こういう形でフィードバックしていけたらよいなと強く思った。参考にして頂いてありがとうございます。 […]

pingback from 人間とウェブの未来 » Apache 2.4.1まとめ – リリース後2週間を迎えて 12-03-06 (火) 13:35

[…] […]

pingback from Raúl Del Campo 12-04-07 (土) 11:40

[…] decentes como buenas comparativas entre Apache 2.4, Apache 2.2 contra Ngix. Uno de ellos en japonés no da algunas pistas de como se manejar Apache 2.4 usando el […]

pingback from 人間とウェブの未来 - Apache2.4で mod_mruby vs mod_lua ベンチマーク対決 12-04-25 (水) 22:25

[…] では、以下のパラメータでベンチマークをとります。環境は、Apache 2.4.1のスループット評価(旧ApacheとNginxとのベンチマーク比較)の時と同じになります。今回は、前回のスループットではなく、純粋にどの程度の速度で処理が可能なのかを知るために、それぞれがある程度余裕をもって処理できるパラメータを見つけて、複数回ベンチマークをとってみました。 […]

pingback from 人間とウェブの未来 - ApacheとNginxの性能比較でevent_mpmの本気を見た 12-10-31 (水) 11:25

[…] この設定で、例えば以下のabコマンドで同時接続数100総接続数10万でベンチをとると以下のようになります。実験環境はいつもと同じです。 […]

Home > Apacheについて | Linux | 研究について > Apache 2.4.1のスループット評価(旧ApacheとNginxとのベンチマーク比較)

検索
フィード
メタ情報

Return to page top