プロが教える店舗&オフィスのセキュリティ対策術

現在、自分のサイトをabコマンドで負荷テストしています。
ab -c 10 -n 100 http://~/
10同時接続で、100回リクエストしています。
この結果、
Requests per second: 31.03 [#/sec] (mean)
秒間のリクエスト数が31と、結構ひどいなと思って、他のサイトで試したところ、

■教えてgooトップ
ab -c 10 -n 100 http://oshiete.goo.ne.jp/
Requests per second: 25.08 [#/sec] (mean)
秒間25ということは、100同時アクセスで・・・と考えると非常に遅い気がします。

■twitter (goo_blog)
ab -c 10 -n 100 http://twitter.com/goo_blog
Requests per second: 13.75 [#/sec] (mean)
twitterが秒間13リクエストしか処理できないとかありえない気がします。

そもそもこの考え方って間違ってますか?
詳しい方、ぜひご教授下さい。
よろしくおねがいします。

A 回答 (2件)

abの実装を知らないので正確なところは言えませんが、RTTの問題は大きいでしょう。


twitterはサーバが海外にあるので、120ms以上のRTTがかかります。HTTP GETを行うためにはTCPハンドシェイクで二往復が必要なので、一回の処理に最低でも250ms程度はかかります。さらに、裏では何らかのプログラムが動いているので、実際はこれよりもさらに遅延します。

これは、たとえば、接続数が10000個あったとしたら、その10000個すべての接続で同じように起こる遅延です。
したがって、並列数を変えればまた違った結果も出るはずです。

ベンチマークによって何をはかりたいかに寄るのですが、CPUやメモリ等のリソースによるApacheの限界をはかりたいのなら、webサーバのlocalhostから大量の並列リクエスト数で実行するのが正しいベンチマーク方法かと思います。でないと、webサーバとの間のRTTが測定上のボトルネックとなってしまいます。
それが無理なら、並列リクエスト数だけでも多くすべきかと。

あと、ベンチマークソフトを外部のサービスに行うことは、攻撃者と見なされても仕方ないことなので、やめた方が良いですよ、と一般的なアドバイスもしておきます。

この回答への補足

回答ありがとうございます。
なるほど勉強になります!

自分が一番気になった部分は、RTTの問題も含め、秒間11リクエストしか捌けないの!?ということです。
twitterも当然負荷分散していると思うんですが、秒間11リクエストしか捌けないなんて、とてもあんな大規模なサービス運営できないと思います。教えてgooもしかりです。yahooやgoogleもおなじです。秒間50も捌けないとabコマンドでは結果として出ます。

この点どう思いますか??

>あと、ベンチマークソフトを外部のサービスに行うことは、攻撃者と見なされても仕方ないことなので、やめた方が良いですよ、と一般的なアドバイスもしておきます。
ごもっともです^^;;;なので一応少な目のリクエストにしてます;

補足日時:2011/02/27 18:57
    • good
    • 0

うーん、さっきので通じなかったか…。



まあ、つまりですね。abコマンドの結果の意味を考えて欲しいわけですよ。
"#/sec" として出てくる値の意味は何か、ということを。

これ、単に、リクエスト数を合計時間で割っただけですよね。
ということは、測っているものはサーバの能力ではなくて、あくまで「自分から見たサーバへのアクセス速度」でしかないわけです。
そして、それはRTTや並列数によって大きく影響を受けるわけです。

つまり、この結果は「秒間13リクエストしか捌けない」ではなく、「平均すると秒間13アクセスできた」が正しい。
サーバ自身のリクエスト処理能力を見たいのなら、サーバlocalhostから見なければ性能評価になりませんよ、と。
そういうことを言いたかったのでした。


蛇足になりますが、apacheの並列数は初期状態では意外と少ないので、それを増やさないと十分な性能が出ない可能性があります。
    • good
    • 0
この回答へのお礼

すいません理解しました;;;;
回答本当にありがとうございました!!!

お礼日時:2011/03/03 01:23

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!