apache負荷テストまとめ

abについて
http://blog.verygoodtown.com/2012/05/apache-bench-ab/

abでcakephp1.2で作った認証と簡単なselectのみのapiをテストしてみた。
スペックはさくらのVPS2G

テスト1
debug=1とdebug=0でFailed requestsの発生数がかなり違う。debug=0は必須だと改めて思った

スト2
認証のみ走る(DBへのselect1回だけ)のケースの結果

ab -n 1000 -c 100 : Failed requests 0
ab -n 2000 -c 500 : Failed requests 0
ab -n 1000 -c 1000 : Failed requests 0
ab -n 5000 -c 1000 : タイムアウト
ab -n 5000 -c 10 : Failed requests 0

どれもRequests per second: 10~30 cpu消費量ほぼ100%

三回目の同時接続1000にしたらabの途中で「apr_socket_recv: Connection timed out (110)」というエラーがでてabがタイムアウトした。サーバーが無茶苦茶重くなってpsしたらhttpdのプロセスが250個くらい立ち上がっていた。MaxClientsの値が256なので、多分その分プロセスが立ち上がっていたんだろう。

5分くらいしてようやく元に戻った。それでもmysqlapacheが落ちるということはなかった。

あと今度はapiを別サーバーのphpからforeachで10000回ほど呼び出してみたところcpuの消費量は20~30%程度でブラウザから他のサービスにも普通にアクセスできた。なのでやはり同時アクセスが肝なんだろう。

テスト3
ベーシック認証のみ走る(スクリプトは実行されない)ケース

↑のテスト全て Failed requests: 0 でかつ、Requests per second: 50~300 cpu消費量10%前後

びっくりした。あまりにも結果が違って。apacheのみで処理するのとスクリプト(select1回)で処理する際の負荷がここまで違うとは。久々に度肝抜かれた。本当にびっくりした。

スト2ではどれもcpuが100%で他の処理を受け付けない状態だったのに、テスト3では同時アクセス1000にしてもほとんど影響がなかった。

.htpasswdを1000行ほどにしても負荷はほとんど変わらない。

apiの認証どうしようか迷っていたけど、ベーシック認証で決まりだわ。これで多少の不正な大量アクセスくらいならびくともしないはず(多分)。