Z uwagi na brak czasu dawno nic nie pisałem na blogu. Postanowiłem to zmienić i napisać coś o testach wydajnościowych. Każda aplikacja ma określony czas odpowiedzi na zapytania. Każde zapytanie do aplikacji zajmje określony czas serwera. Nakłada się na to czas przesłanie żadania, czas odpowiedzi serwera, czas wykonania aplikacji itp itd.

Aplikacja jeśli jest źle napisana będzie zwalniała przy większym obciążeniu. Poza tym, podczas zwiększonego ruchu mogą wystąpić błędy, o których wcześniej niewiedzieliśmy. Na szczęscie do testowania wydajności mamy narzędzia, które pomagają nam zdiagnozować zachowanie naszej aplikacji i jej wydajność przy określonym(przez nas) ruchu.

Pierwszym łatwo dostępnym i prostym narzędziem do testowanai wydajności aplikacji PHP jest Apache Benchmark. Program ten dostarczany jest wraz z serwerem Apache i można go uruchomić z lini poleceń(powłoki). Znajdziemy go w katalogu bin pod nazwą ab.exe(lub inna w zależności od systemu operacyjnego). Apache benchmark ma kilka istotnych parametrów

-n liczba zapytań, które mają zostać wykonane

– c ilość zapytań jednoczesnych

– k wymusza ustawienie nagłówka keep alive

inne przydatne parametry:

-C cookie-name=value – ustawia cookie

-A autentykacja http

przykład użycia dla strony google.pl z 100 zapytaniami max 3 jednoczesne(zwróc uwage że url musi kończy się znakiem „/”!)

ab -n 100 -c 3 http://www.google.pl/

Odpowiedź programu to:

This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking www.google.pl (be patient).....done


Server Software:        gws
Server Hostname:        www.google.pl
Server Port:            80

Document Path:          /
Document Length:        18131 bytes

Concurrency Level:      3
Time taken for tests:   4.491 seconds
Complete requests:      100
Failed requests:        95
   (Connect: 0, Receive: 0, Length: 95, Exceptions: 0)
Write errors:           0
Total transferred:      1894325 bytes
HTML transferred:       1812925 bytes
Requests per second:    22.27 [#/sec] (mean)
Time per request:       134.738 [ms] (mean)
Time per request:       44.913 [ms] (mean, across all concurrent requests)
Transfer rate:          411.90 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       32   33   0.7     33      36
Processing:    93  100  17.0     97     263
Waiting:       58   79  20.0     77     230
Total:        126  132  17.0    130     296

Percentage of the requests served within a certain time (ms)
  50%    130
  66%    131
  75%    132
  80%    132
  90%    133
  95%    137
  98%    160
  99%    296
 100%    296 (longest request)

Co oznaca że czas wykonania 100 zapytań to 4.491 s. Czas na zapytanie to 134.738 ms, ilośc zapytań na sekunde to 22.27. Modyfikując parametry jesteśmy w stanie sprawdzić czas odpowiedzi naszej aplikacji przy większym natęzeniu ruchu.

Inne warte uwagi narzędzia to:

  • http://www.joedog.org/siege-home/
  • https://jmeter.apache.org/
  • https://code.google.com/p/httperf/