> | > 負荷テストAB(Apache Bench)を使ってみる。

負荷テストAB(Apache Bench)を使ってみる。

Posted on 2010/09/27 | No Comments

ベンチの事を書いたので、負荷テストツールを使ってみます。

負荷テストツールで有名な物は、

  1. JMeter
  2. AB
  3. もろもろ
今回はお手軽なAB(Apache Bench)を利用してWEBサーバの性能測定をしてみます。


ABは、Apacheがインストールされていれば標準でついてくると思いますので、
早速実行してみましょう。

[root@localhost ~]# ab -h
Usage: ab [options] [http[s]://]hostname[:port]/path
Options are:
    -n requests     Number of requests to perform
    -c concurrency  Number of multiple requests to make
    -t timelimit    Seconds to max. wait for responses
    -p postfile     File containing data to POST
    -T content-type Content-type header for POSTing
    -v verbosity    How much troubleshooting info to print
    -w              Print out results in HTML tables
    -i              Use HEAD instead of GET
    -x attributes   String to insert as table attributes
    -y attributes   String to insert as tr attributes
    -z attributes   String to insert as td or th attributes
    -C attribute    Add cookie, eg. 'Apache=1234. (repeatable)
    -H attribute    Add Arbitrary header line, eg. 'Accept-Encoding: gzip'
                    Inserted after all normal header lines. (repeatable)
    -A attribute    Add Basic WWW Authentication, the attributes
                    are a colon separated username and password.
    -P attribute    Add Basic Proxy Authentication, the attributes
                    are a colon separated username and password.
    -X proxy:port   Proxyserver and port number to use
    -V              Print version number and exit
    -k              Use HTTP KeepAlive feature
    -d              Do not show percentiles served table.
    -S              Do not show confidence estimators and warnings.
    -g filename     Output collected data to gnuplot format file.
    -e filename     Output CSV file with percentages served
    -h              Display usage information (this message)
    -Z ciphersuite  Specify SSL/TLS cipher suite (See openssl ciphers)
    -f protocol     Specify SSL/TLS protocol (SSL2, SSL3, TLS1, or ALL)


-n で接続回数、-cで同時接続数がよくある形なので、
1000回、同時接続を100想定で負荷試験を実行してみます。
ちなみに今回、muninのグラフサイトを目標に同一サーバ上から実行しました。

[root@localhost ~]# ab -n 1000 -c 100 http://localhost/munin/localhost/localhost.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 localhost (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
Server Hostname:        localhost
Server Port:            80

Document Path:          /munin/localhost/localhost.html
Document Length:        12299 bytes

Concurrency Level:      100
Time taken for tests:   0.307760 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      12537000 bytes
HTML transferred:       12299000 bytes
Requests per second:    3249.29 [#/sec] (mean)
Time per request:       30.776 [ms] (mean)
Time per request:       0.308 [ms] (mean, across all concurrent requests)
Transfer rate:          39781.00 [Kbytes/sec] received

Connection Times (ms)
min  mean[+/-sd] median   max
Connect:        0    0   1.8      0      10
Processing:     4   28   6.7     28      45
Waiting:        3   27   6.7     28      44
Total:          4   28   6.4     29      45

Percentage of the requests served within a certain time (ms)
50%     29
66%     30
75%     30
80%     31
90%     40
95%     43
98%     44
99%     44
100%     45 (longest request)

結果が流れてきました。
Server Software: で使用しているwebserverの種類が判ります。

Complete requests: で完了したリクエスト、Failed requests: で失敗したリクエスト数が判ります。
Failedが有るようであれば、試行したリクエストが実際に発生した場合は正常にレスポンスを返す事が出来ない可能性がありますので、チューニングの必要性があるかも知れません。

Requests per second: で1秒間に処理出来るリクエスト数が判ります。

Connection Times で、処理の内訳をConnect, Processing, Waitingで見る事が可能です。

今回、テスト先が静的なhtmlでしたので、値として面白い物は出ていませんが、
動的に生成されたページに対してリクエストを行うと、より使えるデータが取得出来るのではないかと思います。

と、言う事で最後にこのblogに対して行った結果を載せておきます。
注意:負荷試験を行う時は、オプション指定を確認しましょう。

[root@localhost conf]# ab -n 100 -c 10 http://blog.ho10.info/
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 blog.ho10.info (be patient).....done


Server Software:        GSE
Server Hostname:        blog.ho10.info
Server Port:            80

Document Path:          /
Document Length:        113391 bytes

Concurrency Level:      10
Time taken for tests:   3.349053 seconds
Complete requests:      100
Failed requests:        69
   (Connect: 0, Length: 69, Exceptions: 0)
Write errors:           0
Non-2xx responses:      64
Total transferred:      4123429 bytes
HTML transferred:       4092370 bytes
Requests per second:    29.86 [#/sec] (mean)
Time per request:       334.905 [ms] (mean)
Time per request:       33.491 [ms] (mean, across all concurrent requests)
Transfer rate:          1202.13 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       32   39   9.6     35      61
Processing:   161  283 186.8    190    1171
Waiting:      161  220 131.4    178    1030
Total:        194  322 187.0    244    1204

Percentage of the requests served within a certain time (ms)
  50%    244
  66%    354
  75%    369
  80%    398
  90%    609
  95%    713
  98%   1132
  99%   1204
 100%   1204 (longest request)

GSE(Google Servlet Engineだったでしょうか)を利用していて、
1秒間の処理は29.86リクエスト、Failedが69リクエストに対して出ていますね。。。
google先生に怒られたくはないので、このへんで。

それでは。

Leave a Reply

Powered by Blogger.