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/
Zostaw komentarz