Ten wpis nie jest o tym, jak poprawić wydajność serwera Apache czy MySQL, lecz o tym jak przetestować maksymalne obciążenie serwera Apache oraz pośrednio bazy danych i skryptów PHP. Niemniej jednak wspomnę o pewnych ustawienia dot. wydajności tych serwerów.
Więc, gdy już staniesz przed zadaniem polegającym na oszacowaniem, czy Twój serwer sprosta określonemu zadaniu czas zapoznać się z co najmniej jednym narzędziem przeznaczonym to testowania jego wydajności. Ponieważ mowa tu o konkretnym serwerze jakim jest Apache, to najlepszym wyborem będzie narzędzie ab (skrót od ApacheBench).
ApacheBench możemy zainstalować w systemie Debian instalując paczkę apache2-utils. Dobrze jest te same testy wykonać bezpośrednio z samego serwera (czyli testujemy sam serwer) oraz ze zdalnego hosta, gdzie do testu wydajności serwera zostanie wkomponowana wydajność łącza, którym posługuje się serwer.
Najciekawszymi opcjami programu ab są parametry:
-c - określa ilość jednoczesnych zapytań
-t - określa czas trwania testu
-n - określa całkowitą ilość zapytań, które mają zostać wysłane
Serwer można testować na różne sposoby. Możemy kazać mu obsłużyć np. 2 tyś. zapytań i patrzeć ile mu to zajmie czasu (z określaniem ilości maksymalnych połączeń lub bez). Taki test ma następująca składnię:
ab -c 150 -n 200 <adres serwera>
Wynik takiego testu odpowie na pytanie ile czasu zajmie dla serwera obsłużenie 200 zapytań przy założeniu, że maksymalna ilość jednoczesnych zapytań nie będzie większa niż 150.
grzesiek@home:~$ ab -c 150 -n 200 http://abc.defgh.pl/sklep/
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 abc.defgh.pl (be patient)
Completed 100 requests
Completed 200 requests
Finished 200 requests
Server Software: Apache
Server Hostname: abc.defgh.pl
Server Port: 80
Document Path: /sklep/
Document Length: 4180 bytes
Concurrency Level: 150
Time taken for tests: 27.192 seconds
Complete requests: 200
Failed requests: 0
Write errors: 0
Total transferred: 929000 bytes
HTML transferred: 836000 bytes
Requests per second: 7.36 [#/sec] (mean)
Time per request: 20393.908 [ms] (mean)
Time per request: 135.959 [ms] (mean, across all concurrent requests)
Transfer rate: 33.36 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 56 652 1002.6 189 3453
Processing: 1039 14081 7456.0 16816 26197
Waiting: 991 10618 5224.2 12306 21415
Total: 1100 14733 7740.0 19039 26429
Percentage of the requests served within a certain time (ms)
50% 19039
66% 20760
75% 21232
80% 21387
90% 22152
95% 23612
98% 23821
99% 24356
100% 26429 (longest request)
Drugim sposobem testowania może być test, który sprawdza ile zapytań serwer zdoła obsłużyć np. w czasie 3 minut przy założeniu, że maksymalna ilość jednoczesnych połączeń nie będzie większa niż 300. Oto przykład:
ab -c 300 -t 300 <adres serwera>
Oczywiście podane w przykładach obciążenia są przesadzone, chyba że posiadasz bardzo dobre łącze.
Poza ab watro również zainteresować się programem httperf, który potrafi wykonywać testy z obciążeniem podobnym do rozkładu Poissona oraz http_load. Ten ostatni pod Debianem należy samemu skompilować.
http://httpd.apache.org/docs/2.0/programs/ab.html
http://www.hpl.hp.com/research/linux/httperf/
http://acme.com/software/http_load/