Apache Benchで性能テスト

今日はNCEで提携もとい契約管理しているサーバのうち、2つをピックアップして比較、性能測定を行ってみます。こんばんわ、Web担当 神凪です。
ウチみたいにWebサーバを持っていると、どこまでの負荷に耐えられるか、パフォーマンスはどうなのかといったところは気になるところです。
これをしっかり考えておかないとアクセス方のパフォーマンスガタ落ちからのサービスダウンなんてことに。

そんなことにならないようにApacheに標準でついてくるApache Benchで性能を把握しておきましょう。

目標

  • 各サーバにおける
    • 性能限界の把握
    • 同一の負荷をかけて性能比較
    • 相対するサーバに対してテストを行い、サイト別の応答時間の把握

環境

  • CentOS 7.3
  • Apache 2.4.6

準備

手順

Apache Benchの使い方は割と簡単です。今回はよく使うオプションに絞って解説していきます。

オプションについて

n、cオプションの意味はこんな感じ

オプション名 説明
-n 数値 リクエストの総数。数値指定
-c 数値 同時に発行するリクエスト数。数値指定

例えば100ユーザが同時に10リクエストを発行した場合は-n 1000 -c 100となります。
-c でユーザ数。-nは100ユーザ×10リクエストで1000ですね。

他にもいろいろオプションがあります。これ以外のオプションは-h で確認してください。

Time4VPSでの負荷テスト

Time4VPSはウチで提携しているEU拠点のサーバです。
格安どころではない格安で使用できるのがウリ。

ここでは全ユーザが10セッションずつを使用する状況を想定していきます。
最終的にFailedなしで最大になったのが以下のコマンド。500はクリアできませんでした。

 ab -n 5000 -c 500 http://localhost/ 
Server Software:        Apache/2.4.6
Server Hostname:        localhost
Server Port:            80

Document Path:          /
Document Length:        4897 bytes

Concurrency Level:      500
Time taken for tests:   4.042 seconds
Complete requests:      5000
Failed requests:        0
Write errors:           0
Non-2xx responses:      5000
Total transferred:      25840000 bytes
HTML transferred:       24485000 bytes
Requests per second:    1236.93 [#/sec] (mean)
Time per request:       404.228 [ms] (mean)
Time per request:       0.808 [ms] (mean, across all concurrent requests)
Transfer rate:          6242.61 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   16 115.2      0    1004
Processing:     5  169 568.3     29    3033
Waiting:        0  169 568.3     29    3033
Total:         19  185 635.8     30    4011

Percentage of the requests served within a certain time (ms)
  50%     30
  66%     36
  75%     46
  80%     50
  90%     62
  95%   1510
  98%   3053
  99%   4003
 100%   4011 (longest request)

比較的高い数値で安定しているようです。
ちょっと気になるのは、Percentageの部分で、95%タイルを境に時間がかかり始めるところかな。 さすがに5000セッションの95%なんて、ウチでは到底届かないところではありますが。

CloudGarageで負荷テスト

EUサーバと同様に。 こちらも500ユーザクリア、600はNG。

 ab -n 5000 -c 500 http://localhost/ 
Server Software:        Apache/2.4.6
Server Hostname:        localhost
Server Port:            80

Document Path:          /
Document Length:        4899 bytes

Concurrency Level:      500
Time taken for tests:   1.493 seconds
Complete requests:      5000
Failed requests:        0
Write errors:           0
Total transferred:      25865000 bytes
HTML transferred:       24495000 bytes
Requests per second:    3349.31 [#/sec] (mean)
Time per request:       149.285 [ms] (mean)
Time per request:       0.299 [ms] (mean, across all concurrent requests)
Transfer rate:          16919.90 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    4   4.7      3      24
Processing:     7   75 155.6     18    1055
Waiting:        2   73 155.7     15    1055
Total:         10   79 159.0     21    1057

Percentage of the requests served within a certain time (ms)
  50%     21
  66%     22
  75%     24
  80%     26
  90%    237
  95%    434
  98%    842
  99%    842
 100%   1057 (longest request)

EUサーバよりもかなり性能がいいことが見て取れます。
90%タイルで時間がかかり始めますが、それでも200msと1秒切っています。優秀です。

比較する

結局オプションが全く同じになってしまったので、単体サーバ性能比較も行ってしまいましょう。

ウチでは「Time taken for tests」「Requests per second」「Transfer rate」を主に見ています。あと「within a certain time」
このテストでは総じてCloudGarageが優秀ということになります。

とはいえ、このレベルになりますともうウチみたいなところでは気になるレベルではありませんね。
サーバ性能支店では双方ともに全く問題ありませんでした。

日本からアクセスするとどうか

ということで、CloudGarageサーバからEUサーバにアクセスするとどうなのでしょうか。
国が異なるとどういう結果になるのか、ちょっと気になります。

ab -n 1600 -c 160 http://Time4VPSServerAddr/

170以上はTimeOut起こしてしまいました。

Server Software:        Apache/2.4.6
Server Hostname:        Time4VPSServerAddr
Server Port:            80

Document Path:          /
Document Length:        4897 bytes

Concurrency Level:      160
Time taken for tests:   41.007 seconds
Complete requests:      1600
Failed requests:        0
Write errors:           0
Non-2xx responses:      1600
Total transferred:      8268800 bytes
HTML transferred:       7835200 bytes
Requests per second:    39.02 [#/sec] (mean)
Time per request:       4100.683 [ms] (mean)
Time per request:       25.629 [ms] (mean, across all concurrent requests)
Transfer rate:          196.92 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:      199  294 382.3    204    7217
Processing:   200 2973 2142.0   2826   40394
Waiting:      200 2971 2126.3   2825   40186
Total:        400 3267 2174.5   3045   40602

Percentage of the requests served within a certain time (ms)
  50%   3045
  66%   3064
  75%   3096
  80%   3176
  90%   3846
  95%   4050
  98%   4628
  99%   8128
 100%  40602 (longest request)

うーん・・・。安定して3秒で接続できるととらえればいいのか・・・な・・・。
間違いなくネットワーク遅延が原因の性能限界です。

こうなるともう個人レベルではどうこうしようがありません。なにせ大陸間海底ケーブルをどうにか、という話になってしまいますから。

もちろん、このデメリットを許容して使用するのはアリ。
費用対効果。ウチでも格安として紹介提携しています。よろしければご相談くださいませ。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください