xoopsでのResizeの効果測定

一番気になっていたことは、サーバのResizeしていってどのぐらいの負荷をさばけるようになるかということです。

ワクワクしてきますね♪

負荷調査ツール

apache benchを使います。
※自分が所有しているサイト以外には絶対にやらないでください。
訴えられますよ。

コマンド

ex)

ab -c 10 -n 10 http://テストさいと.com

オプション 意味
-n 数値 テストで発行するリクエストの回数を数値で指定
-c 数値 テストで同時に発行するリクエストの数を数値で指定

テスト内容

アクセス元 自分のPC(windowsXP)
ターゲットサービス xoops(LAMP構成)
ターゲットURL http://rackspace-jp.com/userinfo.php?uid=1
同時接続する数 100コネクション
リクエスト回数 100回

1GBまでしか、この条件でテストしませんでした。
ごめんなさい。

テスト実施

■256MBプラン

Requests per second: 4.30 [#/sec] (mean)

  • 備考

リクエスト数:1000回だと、サーバ完全に沈黙

■512MBプラン

Requests per second: 5.97 [#/sec] (mean)

  • 備考

リクエスト数:1000回でも、普通にさばいている
どんなに負荷をかけてもサーバは落ちなくなった。apacheの設定の問題だとは思いますが。

httpd.conf

項目 変更前 変更後
MaxClient 500 20000
KeepAliveTimeout 15 60


こうすれば、サーバのリソースを使いきれるはずです。
しかし、これでも落ちなかった。

■1024MBプラン

Requests per second: 5.95 [#/sec] (mean)

  • 備考

512MBプランと変わりがないです。
このサーバのリソースを限界がわかりません。

原因は、自分のPC上からアクセスしているので、xamppのapache bentchを使っていることでした。
どこかで制限がかかっているようです。

1000コネクションで、1000リクエストだとサーバは落ちました。

Benchmarking localhost (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
apr_socket_recv: Connection reset by peer (104)
Total of 314 requests completed

300リクエストを超えたぐらいで、悲鳴をあげているようです。
そのあと、処理を止めたのでサーバは3分ぐらいしたら落ち着きました。

よし、次行ってみよう!

■2GBプラン

1000コネクションで、1000リクエストだとサーバは落ちました。

Benchmarking localhost (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
apr_socket_recv: Connection reset by peer (104)
Total of 702 requests completed

702リクエストまで、さばけました。先ほどは、300までだったので2倍以上にアップしましたね。

■4GBプラン

apr_socket_recv: Connection reset by peer (104)

このようなエラーが発生してしまって、最後までいきませんでした。

理由はこの説明がぴったり

また、1台のコンピュータが発生させられる同時接続数についても注意したい。例えば、高性能なUNIXサーバに対して測定する場合、相当な数の同時接続を発生させる必要がある。しかし、普通のPCサーバで発生させられる同時接続数には、おのずと限界がある。従って、複数台のコンピュータにabを入れて測定しなければならない。たとえ、1台のコンピュータでこなせる数だとしても、複数台での測定も試してみることを勧める。

つまり、測定する側の限界ということです。


ですので、下記のようなオプションに変更しました。

# /usr/bin/ab -c 1000 -n 1000 -t 10 http://localhost/

測定する時間を、10秒間だけにしました。


すると、、

Requests per second: 35.50 [#/sec] (mean)

驚異的にさばいている。

■8GBプラン

Requests per second: 82.49 [#/sec] (mean)

■16GBプラン(最強)

一応しらべときます。

Requests per second: 75.67 [#/sec] (mean)

不思議と落ちました。

考察

スペックをあげていけば(resize)、かなりのアクセスでも捌けることがわかりました。

rackspaceを使えば、ちょっと作ったサービスに急に人気が出たさえも、ボタン一つでサーバのスペックをあげて対応ができ、かつそれがかなりのレベルのサーバのスペックにまでなる。

これは、素人革命ですね。



ps.
xoopsは、かなり負荷がかかりますねw


resizeについて

今のサーバに容量が少ないからだろうが、カップラーメンが出来上がるぐらいの時間でresizeが完了しました。

また、resizeの初めから中番ぐらいまでは、ホームページは表示されています。
つまり、riseize前のサーバは生きています。teratermも繋がったままです。

しかし、resizeの最後の方ではサーバにアクセスできなくなります。
新しくできたサーバにIPアドレスを入れ替えたりしているのではないでしょうか。


おまけ

フレームワークとか、xoopsのようなCMSなど、DBをカラムものは大量のアクセスが来たらどんなにサーバのスペックを上げようが限度があると思います。

これを見てください。

Requests per second: 5000.00 [#/sec] (mean)

静的ファイルだと、こんなにも捌けます(最上位プラン)。
結局は、負荷対策はキャッシュを使う。これしかありません。

最初に(256MBのプラン)、リクエスト回数1000で、コネクション100でアタックをかけたら完全にサーバが固まりました。

load average: 102.43, 77.03, 36.52

本当に怖いですね。実際に動いているサービスにこれして、サーバ落としたら賠償請求されますよ。。
こういう攻撃に対応していないサイトが悪いと言いたいですが。。

謝罪

ここまで負荷をかけたテストをしたことがなかったので、最初に想定していたテストがまったく通用しませんでした。

負荷のかかるサーバをテストするには、もっと技術力が必要です。
勉強しなおそうと思います。


参考サイト

Apacheパフォーマンス・チューニングのポイント(@IT)
http://www.atmarkit.co.jp/flinux/rensai/apache15/apache15b.html