6.どのくらいのアクセス量が適切か


株式会社オーララインのY.Mです。
本日は、BIGLOBEクラウドホスティング(https://business.biglobe.ne.jp/hosting/)のデフォルト構成で、単純なWebサイトの場合、どのくらいのアクセス量を処理できるのか試してみます。

●評価ツール

評価ツールにはApacheに付属しているApacheBenchを利用します。
ApacheBenchの結果について、通常は、接続時間・処理時間・待ち時間の内訳(Connect / Processing / Waiting)や転送速度(Transfer rate)も見てリクエスト当たりの処理の内訳を見極めたりネットワーク環境のチューニングを考慮したりしますが、今回は単純に下記の項目を重視します。

Failed requests(リクエストの成否)
リクエストの失敗が発生しているようならWebサーバの処理が追い付いていない。特にプログラムを実行してページを生成する場合に起こりやすく、同時接続数の限界を超えていると考える。

Requests per second(1秒間に処理されたリクエスト数)
1秒間にどれだけ処理できたかを表す。パラメータやプログラムを修正したりしてその効果を測る際にも、この項目の数値がどれだけ改善するか(数値が大きくなるか)で評価を行う。

●サーバーの環境

サーバはカスタマイズなしのベースモデルを利用します。
OS    CentOS 5.8
CPU    Intel(R) Xeon(R) CPU L5630  @ 2.13GHz
MEM    895008 KB
Swap    4194296 KB

●まずは、静的HTMLに対して同時接続数を100にして1000リクエスト投げてみます。

 

# ab -c 100 -n 1000 http://202.225.0.47/top.html
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/

Benchmarking 202.225.0.47 (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Finished 1000 requests

Server Software:        Apache/2.2.3
Server Hostname:        202.225.0.47
Server Port:            80

Document Path:          /top.html
Document Length:        14020 bytes

Concurrency Level:      100
Time taken for tests:   0.306519 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      14306292 bytes
HTML transferred:       14034020 bytes
Requests per second:    3262.44 [#/sec] (mean)
Time per request:       30.652 [ms] (mean)
Time per request:       0.307 [ms] (mean, across all concurrent requests)
Transfer rate:          45576.29 [Kbytes/sec] received

Connection Times (ms)
min  mean[+/-sd] median   max
Connect:        0    1   2.3      2      11
Processing:     3   26   5.1     29      32
Waiting:        2   24   4.6     27      28
Total:          7   28   5.2     32      42

Percentage of the requests served within a certain time (ms)
50%     32
66%     32
75%     32
80%     32
90%     32
95%     32
98%     35
99%     37
100%     42 (longest request)

 

とても早いです。同時接続数100、1000リクエスト程度のHTML表示であれば余裕です。

●それでは、同時接続数を500にして1万リクエスト投げてみます。

 

# ab -c 500 -n 10000 http://202.225.0.47/top.html
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/

Benchmarking 202.225.0.47 (be patient)
:(~省略~)
Document Path:          /top.html
Document Length:        14020 bytes

Concurrency Level:      500
Time taken for tests:   6.295951 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      143020044 bytes
HTML transferred:       140298140 bytes
Requests per second:    1588.32 [#/sec] (mean)
Time per request:       314.798 [ms] (mean)
Time per request:       0.630 [ms] (mean, across all concurrent requests)
Transfer rate:          22183.78 [Kbytes/sec] received

Connection Times (ms)
min  mean[+/-sd] median   max
Connect:        0    7 108.1      3    3001
Processing:     0  177 760.4     38    6261
Waiting:        0  174 760.8     35    6260
Total:         16  184 779.8     39    6294

:(~省略~)

 

こちらも早い。何の問題もなさそうです。

●これではつまらないので、WordPressのトップページで計測してみます。

サーバは継続してカスタマイズなしのベースモデルを利用します。
WordPressを動かすためphpのバージョンアップのみ実施し、ApacheやPHP、WordPressのチューニングは行わず、データも初期状態のままで測定します。

サーバーの環境
OS    CentOS 5.8
CPU    Intel(R) Xeon(R) CPU L5630  @ 2.13GHz
MEM    895008 KB
Swap    4194296 KB
Apache    2.2.3
php    5.3.3
mysql    5.0.95
WordPress    3.3.1

WordPressのトップページに対して同時接続10で100リクエスト投げてみます。

 

# ab -c 10 -n 100 http://202.225.0.47/wordpress/
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/

Benchmarking 202.225.0.47 (be patient)…..done
:(~省略~)
Document Path:          /wordpress/
Document Length:        7926 bytes

Concurrency Level:      10
Time taken for tests:   23.578690 seconds
Complete requests:      100
Failed requests:        58
(Connect: 0, Length: 58, Exceptions: 0)
Write errors:           0
Total transferred:      817485 bytes
HTML transferred:       792785 bytes
Requests per second:    4.24 [#/sec] (mean)
Time per request:       2357.869 [ms] (mean)
Time per request:       235.787 [ms] (mean, across all concurrent requests)
Transfer rate:          33.84 [Kbytes/sec] received

Connection Times (ms)
min  mean[+/-sd] median   max
Connect:        0  743 683.3    593    2374
Processing:   222 1584 1984.5   1024   11399
Waiting:        0 1392 2008.3    807   11318
Total:        222 2328 1928.5   2237   11416

:(~省略~)

 

やはり動的なページは重たいです。

●WordPressのプラグインを導入して計測してみます。

1日1万PVを超える場合は、まずWordPressで利用していないプラグインを外したり、
「WP Super Cache」プラグインを導入するのが良いです。
「WP Super Cache」を導入した状態で、WordPressのトップページに対して同時接続10で
100リクエスト投げてみます。

 

# ab -c 10 -n 100 http://202.225.0.47/wordpress/
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/

Benchmarking 202.225.0.47 (be patient)…..done
:(~省略~)
Document Path:          /wordpress/
Document Length:        8234 bytes

Concurrency Level:      10
Time taken for tests:   1.176000 seconds
Complete requests:      100
Failed requests:        1
(Connect: 0, Length: 1, Exceptions: 0)
Write errors:           0
Total transferred:      852626 bytes
HTML transferred:       823380 bytes
Requests per second:    85.03 [#/sec] (mean)
Time per request:       117.600 [ms] (mean)
Time per request:       11.760 [ms] (mean, across all concurrent requests)
Transfer rate:          707.48 [Kbytes/sec] received

Connection Times (ms)
min  mean[+/-sd] median   max
Connect:        0   46  86.9     17     354
Processing:     9   67  36.8     72     363
Waiting:        0   29  21.4     27      81
Total:          9  113  87.2     89     435

:(~省略~)

 

劇的に改善しました!パフォーマンスチューニングを考える際、昨今はCPUやメモリ、HDDなど、ハードウェアの価格が安くなっているのでハードウェアの性能を上げて対処することが容易ですが、ソフトウェア側のチューニングがこんなに簡単にできる場合もあるので、是非一考して欲しいところです。

●感想

サーバーで起動しているサービスの数やソフトウェアのチューニング状況、WordPressで利用しているプラグインの数に大きく左右されるところはありますが、同時接続10*100リクエストが1分間に1回行われると考えて、単純なWebサーバであれば1日15万PV程度は問題なく行えそうです。

これでも重たいと感じる場合は、PHPモジュールAPCの導入やFastCGIやNginx、proxy cacheの利用を
考える必要があります。さらに、メモリの増設やCPUリソース保証利用、Webサーバの冗長化やDBサーバの分離といったサーバ構成も設計する必要があります。

 

お問い合わせ

BIGLOBEクラウドホスティングについて、もっと知りたい方、質問がある方、まずはBIGLOBE法人コンタクトセンターへお電話、または下記のお問い合わせフォームからお問い合わせください。phoneotoiawase

カテゴリー: 技術情報 タグ: , , パーマリンク