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.
niezły blog,
ReplyDeletewłaśnie wgryzam się w apacza a widzę że tu mogę znaleźć kilka ciekawostek.
tak trzymać
ab.exe -n100 -c100 -k http://www.example.org/ab_test.php
ReplyDeleteSpowoduje ono pobranie pliku ab_test.php z serwera www.example.org 100 razy, przy czym w jednym czasie będą przeprowadzane 3 połączenia.
Na jakiej podstawie wnioskujesz ze liczba jednoczesnych polaczen jest 3 ?
Tak stoi w dokumentacji apache benchmark:
Deletehttp://httpd.apache.org/docs/2.2/programs/ab.html