Kontrola wydajności - Apache Benchmark

Niejednokrotnie wprowadzamy rozwiązania, co do wydajności których nie możemy być pewni. Warto jest wówczas skorzystać z narzędzia pozwalającego na jej kontrolę. Moim ulubionym narzędziem jest Apache Benchmark (ab.exe), dostępny razem z dystrybucją serwera Apache.

AB (Apache Benchmark) pozwala na wielokrotne wywołanie URL i przygotowuje statystyki czasu wykonania.
Program wywołujemy z linii poleceń, jego najważniejsze parametry to:

  • n - ilość zapytań
  • c - ilość zapytań w tym samym czasie
  • k - wymusza użycie stałego połączenia - HTTP KeepAlive

Przykładowe wywołanie może mieć postać:

ab.exe -n100 -c100 -k http://www.example.org/ab_test.php

Spowoduje ono pobranie pliku ab_test.php z serwera www.example.org 100 razy, przy czym w jednym czasie będą przeprowadzane 3 połączenia.

Podczas testowania wydajności skryptów, warto pamiętać o włączeniu opcji stałego połączenia HTTP (parametr -k). Dzięki temu, czasy nawiązywania połączeń z serwerem nie wpłyną znacząco na wyniki. Jeżeli natomiast testujemy ogólną wydajność serwera oraz jego dostępność z innych sieci, warto pozostawić domyślne ustawienie.

Przykładowe wyniki działania Apache Benchmark:

Wynik 1

This is ApacheBench, Version 2.0.40-dev <
                            $Revision: 1.121.2.8 $> apache-2.0
Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd,
                            http://www.zeustech.net/
Copyright (c) 1998-2002 The Apache Software Foundation,
                            http://www.apache.org/  

Benchmarking xxxxxxxxxxxxxxx (be patient).....done 

Server Software:        Apache/2.0.49
Server Hostname:        xxxxxxxxxxxxxxx
Server Port:            80 

Document Path:          /xxxxxxxxxxxxxxx/normal.php
Document Length:        7496 bytes 

Concurrency Level:      3
Time taken for tests:   6.879892 seconds
Complete requests:      100
Failed requests:        0
Write errors:           0
Total transferred:      766700 bytes
HTML transferred:       749600 bytes
Requests per second:    14.54 [#/sec] (mean)
Time per request:       206.397 [ms] (mean)
Time per request:       68.799 [ms]
                        (mean, across all concurrent requests)
Transfer rate:          108.72 [Kbytes/sec] received 

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    2   5.2      0      30
Processing:   130  196  38.3    190     310
Waiting:       90  172  41.0    160     300
Total:        130  198  38.5    190     310 

Percentage of the requests served within a certain time (ms)
      50%    190
      66%    210
      75%    220
      80%    230
      90%    260
      95%    270
      98%    300
      99%    310
     100%    310 (longest request)

Wynik 2

This is ApacheBench, Version 2.0.40-dev <
                             $Revision: 1.121.2.8 $> apache-2.0
Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd,
                             http://www.zeustech.net/
Copyright (c) 1998-2002 The Apache Software Foundation,
                             http://www.apache.org/        

Benchmarking xxxxxxxxxxxxxxx (be patient).....done        

Server Software:        Apache/2.0.49
Server Hostname:        xxxxxxxxxxxxxxx
Server Port:            80      

Document Path:          /xxxxxxxxxxxxxxx/normal.php
Document Length:        7496 bytes      

Concurrency Level:      3
Time taken for tests:   5.988612 seconds
Complete requests:      100
Failed requests:        0
Write errors:           0
Total transferred:      766700 bytes
HTML transferred:       749600 bytes
Requests per second:    16.70 [#/sec] (mean)
Time per request:       179.658 [ms] (mean)
Time per request:       59.886 [ms]
                        (mean, across all concurrent requests)
Transfer rate:          124.90 [Kbytes/sec] received        

Connection Times (ms)
                min  mean[+/-sd] median   max
Connect:        0    2   4.7      0      20
Processing:    90  168  48.7    160     350
Waiting:       70  144  50.3    140     330
Total:         90  170  48.5    160     350        

Percentage of the requests served within a certain time (ms)
      50%    160
      66%    180
      75%    190
      80%    210
      90%    230
      95%    260
      98%    330
      99%    350
     100%    350 (longest request)

W obu przypadkach testowany był jeden skrypt PHP. Podczas pierwszego testu, skrypt łączył się z serwerem MySQL za pomocą funkcji mysql_connect(). Podczas drugiego testu, skrypt został zmodyfikowany tak, aby do połączenia z serwerem MySQL używał funkcji mysql_pconnect() która otwiera stałe połączenie z serwerem MySQL. Jak widać, użycie stałego połączenia z bazą przyspieszyło stukrotne wykonanie skryptu o 0,89 sekundy.

Polecam uwadze

Nie zostawiaj tak tego! Dodaj komentarz!


statystyki