Ab

From OnnoWiki
Revision as of 04:52, 9 June 2015 by Onnowpurbo (talk | contribs) (New page: Performance Testing your Web Server To benchmark the performance of your web server applications we recommend the Apache "ab" tool. The ab tool will show how many requests per second you...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Performance Testing your Web Server

To benchmark the performance of your web server applications we recommend the Apache "ab" tool. The ab tool will show how many requests per second your Apache installation is capable of serving. The ab tool is a part of the Apache httpd package in CentOS and Red Hat distributions and the "apache2-utils" package in Debian.

Below is the basic ab command and its output. The -c parameter specifies the number of connections; the -k stands for HTTP Keep-Alive; and the -t parameter sets the time in seconds for which each connection is alive. The application is then hammered through those connections.

  1. ab -kc 20 -t 60 http://8.19.73.87/index.html

Benchmarking 8.19.73.87 (be patient) Finished 130 requests


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

Document Path: /index.html Document Length: 283 bytes

Concurrency Level: 20 Time taken for tests: 62.269650 seconds Complete requests: 130 Failed requests: 0 Write errors: 0 Non-2xx responses: 130 Keep-Alive requests: 0 Total transferred: 60060 bytes HTML transferred: 36790 bytes Requests per second: 2.09 [#/sec] (mean) Time per request: 9579.946 [ms] (mean) Time per request: 478.997 [ms] (mean, across all concurrent requests) Transfer rate: 0.93 [Kbytes/sec] received

Connection Times (ms)

             min  mean[+/-sd] median   max

Connect: 206 392 637.2 250 3325 Processing: 4523 8222 3030.7 8016 13982 Waiting: 208 4798 2958.5 4212 10838 Total: 4813 8614 3120.1 8329 14269

Percentage of the requests served within a certain time (ms)

 50%   8329
 66%  10851
 75%  10998
 80%  11128
 90%  13933
 95%  14056
 98%  14189
 99%  14223
100%  14269 (longest request)
   To perform a "flood" test we set the number of requests (-n) to, say, 5000, and assign the number of concurrent connectionsTemplate:(-c) to something like 200:
   # ab -n 5000 -c 200 http://8.19.73.87/index.html
   Benchmarking 8.19.73.87 (be patient)
   Finished 316 requests


   Server Software:        Apache/2.2.3
   Server Hostname:        8.19.73.87
   Server Port:            80
   Document Path:          /index.html
   Document Length:        283 bytes
   Concurrency Level:      1
   Time taken for tests:   203.610963 seconds
   Complete requests:      316
   Failed requests:        0
   Write errors:           0
   Non-2xx responses:      316
   Total transferred:      145992 bytes
   HTML transferred:       89428 bytes
   Requests per second:    1.55 [#/sec] (mean)
   Time per request:       644.338 [ms] (mean)
   Time per request:       644.338 [ms] (mean, across all concurrent requests)
   Transfer rate:          0.70 [Kbytes/sec] received
   Connection Times (ms)
                 min  mean[+/-sd] median   max
   Connect:      206  340 509.5    250    3324
   Processing:   207  302 450.1    250    7830
   Waiting:      206  285 201.5    250    2693
   Total:        414  643 683.4    501    8081
   Percentage of the requests served within a certain time (ms)
     50%    501
     66%    505
     75%    579
     80%    645
     90%    651
     95%   1313
     98%   3648
     99%   3649
    100%   8081 (longest request)
   If the ab output makes you suspect issues, it is useful to look into any replies using tcpdump.  In particular, tcp-rst replies could appear.  To catch them, use:
   # tcpdump -nn 'tcp[tcpflags] == tcp-rst' and port 80
   tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
   listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
   10:59:06.036411 IP 89.253.250.50.53261 > 8.19.73.87.80: R 179261015:179261015(0) win 0
   10:59:06.036521 IP 89.253.250.50.53261 > 8.19.73.87.80: R 179261015:179261015(0) win 0
   10:59:06.036553 IP 89.253.250.50.53261 > 8.19.73.87.80: R 179261016:179261016(0) win 0
   We are interested mostly in tcp-rst server replies, as they point to misconfiguration or performance issues.  To catch server-side tcp-rst replies use:
   # tcpdump -nn 'tcp[tcpflags] == tcp-rst' and port 80 and src host 89.253.250.50
   where 89.253.250.50 is the server hosting your tests.




Referensi