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分くらいしてようやく元に戻った。それでもmysqlやapacheが落ちるということはなかった。
あと今度は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の認証どうしようか迷っていたけど、ベーシック認証で決まりだわ。これで多少の不正な大量アクセスくらいならびくともしないはず(多分)。