VMware上のCentOSを「今運営中のさくらのVPS」になるべく近い状態にして、ApacheBenchによるベンチマークテストを色々と行ってみた。ApacheBenchは1ファイルに対してのアクセスしか出来ないので、出てきた数字を丸々鵜呑みにする事は出来ないが、ある程度の傾向とを知り、今後の対策のヒントを得ようと思った次第。
まずは環境
- Core i7 920 3.3Ghzの2CPUをVMware(CentOS5.5 64bi)に割り当て。
- 色々インストールするモジュールは、なるべくさくらのVPSと近い状態に
今回のベンチ環境について
- HTMLファイルでPHPが作動するようにして、phpincludeで複数のファイルを読み込んで表示するWebページを用意。本番環境と同様のHTMLファイル。
- iptablesは本番環境と同じく、IPアドレスとhashlimitによる細かい振り分けあり。
- サーバーログは一切取らない状態にした
- mod_deflateによる圧縮はしない状態にした
- SetEnvIf~~~Order allow,denyでのアクセス規制は最低限のシンプルなものを用意
- keep AliveはOffにしておいた
ベンチ方法
ab -n 10000 -c 300 http://192.168.xx.xx/xxxx.html
とりあえず、同時接続数200程度ではサクサク過ぎた。同時接続数300位にするとロードアベレージが1を超えるようになったので、その位からスタート。
普通にCentOSサーバーを起動、何もしない状態
apache 3459 0.0 1.4 255492 7228? S 21:05 0:00/usr/sbin/httpd
apache 3460 0.0 1.4 255492 7224? S 21:05 0:00/usr/sbin/httpd
apache 3461 0.0 1.4 255492 7224? S 21:05 0:00/usr/sbin/httpd
apache 3462 0.0 1.4 255492 7224? S 21:05 0:00/usr/sbin/httpd
apache 3463 0.0 1.4 255492 7224? S 21:05 0:00/usr/sbin/httpd
apache 3464 0.0 1.4 255492 7224? S 21:05 0:00/usr/sbin/httpd
apache 3465 0.0 1.4 255492 7224? S 21:05 0:00/usr/sbin/httpd
apache 3466 0.0 1.4 255492 7224? S 21:05 0:00/usr/sbin/httpd
root 3337 0.0 2.4 254468 12424? Ss 21:05 0:00 /usr/sbin/httpd
何もせず1回apache再起動だけ
apache 3632 0.0 1.7 253684 8816? S 21:10 0:00/usr/sbin/httpd
apache 3633 0.0 1.7 253684 8816? S 21:10 0:00/usr/sbin/httpd
apache 3634 0.0 1.7 253684 8816? S 21:10 0:00/usr/sbin/httpd
apache 3635 0.0 1.7 253684 8816? S 21:10 0:00/usr/sbin/httpd
apache 3636 0.0 1.7 253684 8816? S 21:10 0:00/usr/sbin/httpd
apache 3637 0.0 1.7 253684 8816? S 21:10 0:00/usr/sbin/httpd
apache 3638 0.0 1.7 253684 8816? S 21:10 0:00/usr/sbin/httpd
apache 3639 0.0 1.7 253684 8816? S 21:10 0:00/usr/sbin/httpd
root 3337 0.0 3.0 253684 15612? Ss 21:05 0:00 /usr/sbin/httpd
メモリ増えたぞ?
もう一回、何もせずapache再起動
apache 3652 0.0 1.8 255228 9292? S 21:12 0:00/usr/sbin/httpd
apache 3653 0.0 1.8 255228 9292? S 21:12 0:00/usr/sbin/httpd
apache 3654 0.0 1.8 255228 9292? S 21:12 0:00/usr/sbin/httpd
apache 3655 0.0 1.8 255228 9292? S 21:12 0:00/usr/sbin/httpd
apache 3656 0.0 1.8 255228 9292? S 21:12 0:00/usr/sbin/httpd
apache 3657 0.0 1.8 255228 9292? S 21:12 0:00/usr/sbin/httpd
apache 3658 0.0 1.8 255228 9292? S 21:12 0:00/usr/sbin/httpd
apache 3651 0.0 1.9 255228 9872? S 21:12 0:00/usr/sbin/httpd
root 3337 0.0 3.2 255228 16664? Ss 21:05 0:00 /usr/sbin/httpd
やっぱメモリ増えた
40Kbのhttpd.confをコメントアウトで2MBに肥大化させてみる
apache 3680 0.0 2.0 256708 10340? S 21:16 0:00/usr/sbin/httpd
apache 3681 0.0 2.0 256708 10340? S 21:16 0:00/usr/sbin/httpd
apache 3682 0.0 2.0 256708 10340? S 21:16 0:00/usr/sbin/httpd
apache 3683 0.0 2.0 256708 10340? S 21:16 0:00/usr/sbin/httpd
apache 3684 0.0 2.0 256708 10340? S 21:16 0:00/usr/sbin/httpd
apache 3685 0.0 2.0 256708 10340? S 21:16 0:00/usr/sbin/httpd
apache 3686 0.0 2.0 256708 10340? S 21:16 0:00/usr/sbin/httpd
apache 3679 0.0 2.1 256708 10912? S 21:16 0:00/usr/sbin/httpd
root 3337 0.0 3.4 255684 17696? Ss 21:05 0:00 /usr/sbin/httpd
メモリの増大量に変化は無いように見える。
この時点でのab -n 10000 -c 300 http://192.168.xx.xx/xxxx.html
Concurrency Level: 300
Time taken for tests: 12.761145 seconds
Complete requests: 10000
Failedrequests: 9276
(Connect: 0, Length: 9276, Exceptions: 0)
Writeerrors: 0
Total transferred: 420862352 bytes
HTMLtransferred: 418582352 bytes
Requests per second: 783.63 [#/sec] (mean)
Time perrequest: 382.834 [ms] (mean)
Time perrequest: 1.276 [ms] (mean, across all concurrent requests)
Transferrate: 32206.99 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 12241.6 0 9001
Processing: 54 2781449.2 70 12743
Waiting: 54 277 1449.2 70 12743
Total: 54 291 1480.1 71 12757
Percentage of the requests served within a certain time (ms)
50% 71
66% 76
75% 78
80% 79
90% 81
95% 310
98% 1278
99% 12703
100% 12757 (longest request)
サーバー再起動。httpd.confはコメントアウトで2MBに肥大させたまま
apache 3454 0.0 1.3 252472 7024? S 21:22 0:00/usr/sbin/httpd
apache 3455 0.0 1.3 252472 7020? S 21:22 0:00/usr/sbin/httpd
apache 3456 0.0 1.3 252472 7020? S 21:22 0:00/usr/sbin/httpd
apache 3457 0.0 1.3 252472 7020? S 21:22 0:00/usr/sbin/httpd
apache 3458 0.0 1.3 252472 7020? S 21:22 0:00/usr/sbin/httpd
apache 3459 0.0 1.3 252472 7020? S 21:22 0:00/usr/sbin/httpd
apache 3460 0.0 1.3 252472 7020? S 21:22 0:00/usr/sbin/httpd
apache 3461 0.0 1.3 252472 7020? S 21:22 0:00/usr/sbin/httpd
root 3332 0.1 2.3 252472 12224? Ss 21:22 0:00 /usr/sbin/httpd
httpd.confのコメントアウトは関係ないっぽい。メモリ使用量は変わらず。
Concurrency Level: 300
Time taken for tests: 12.752701 seconds
Complete requests: 10000
Failedrequests: 9242
(Connect: 0, Length: 9242, Exceptions: 0)
Writeerrors: 0
Total transferred: 421034465 bytes
HTMLtransferred: 418753325 bytes
Requests per second: 784.15 [#/sec] (mean)
Time perrequest: 382.581 [ms] (mean)
Time perrequest: 1.275 [ms] (mean, across all concurrent requests)
Transferrate: 32241.48 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 9194.2 0 9000
Processing: 1 2491395.0 71 12740
Waiting: 0 248 1394.9 71 12738
Total: 55 258 1412.6 71 12751
Percentage of the requests served within a certain time (ms)
50% 71
66% 73
75% 77
80% 78
90% 82
95% 87
98% 891
99% 12699
100% 12751 (longest request)
ApacheBenchでも有意な差は見受けられない。
httpd.confのコメントアウトの量は、サーバーの最適化に何にも関係ない。ガンガン注釈入れよう。
apacheを20回再起動させてみた
USER PID%CPU %MEM VSZ RSSTTY STATSTART TIME COMMAND
apache 3871 0.0 5.3 274360 27472? S 21:30 0:00/usr/sbin/httpd
apache 3872 0.0 5.3 274360 27468? S 21:30 0:00/usr/sbin/httpd
apache 3873 0.0 5.3 274360 27468? S 21:30 0:00/usr/sbin/httpd
apache 3874 0.0 5.3 274360 27468? S 21:30 0:00/usr/sbin/httpd
apache 3875 0.0 5.3 274360 27468? S 21:30 0:00/usr/sbin/httpd
apache 3876 0.0 5.3 274360 27468? S 21:30 0:00/usr/sbin/httpd
apache 3877 0.0 5.3 274360 27468? S 21:30 0:00/usr/sbin/httpd
apache 3870 0.0 5.6 274624 29060? S 21:30 0:00/usr/sbin/httpd
root 3332 0.3 6.8 274360 34840? Ss 21:22 0:01 /usr/sbin/httpd
すげーメモリ使用量増えた。
ところがTOPで空きメモリ量を見ると、サーバーリセット後とapacheを20回再起動した後で殆ど変わりが無いんだな。
apache再起動にあまり神経質にならなくても良いかもしんない。
Concurrency Level: 300
Time taken for tests: 12.763983 seconds
Complete requests: 10000
Failedrequests: 9257
(Connect: 0, Length: 9257, Exceptions: 0)
Writeerrors: 0
Total transferred: 420890096 bytes
HTMLtransferred: 418609868 bytes
Requests per second: 783.45 [#/sec] (mean)
Time perrequest: 382.919 [ms] (mean)
Time perrequest: 1.276 [ms] (mean, across all concurrent requests)
Transferrate: 32201.94 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 11179.7 0 3002
Processing: 8 2661387.4 75 12742
Waiting: 8 266 1387.4 75 12742
Total: 8 277 1413.3 75 12758
Percentage of the requests served within a certain time (ms)
50% 75
66% 77
75% 78
80% 79
90% 83
95% 101
98% 2110
99% 12695
100% 12758 (longest request)
ApacheBenchやると、数値はちょっとだけ悪化してた。
かなり(運営サイトでは現状考えられないほど)の混雑時になると、レスポンスには影響が出そうな事が解る。
定期的にapacheを再起動させる事も、サーバー自体を再起動させることも、それなりに意味がありそうだと感じた。
と言っても、apacheの再起動は1~2週間に1回、サーバーの再起動は1~3ヶ月に1回やれば十分な感じだけど。