ApacheBench

ApacheBench – program, który został stworzony do wykonywania testów wydajnościowych serwerów HTTP, a w szczególności serwera Apache. „Jest to prosty klient protokołu HTTP, którego jedynym zadaniem jest wydawanie powtarzających się żądań pod adresem serwera. Żądania te spełniają szereg kryteriów, które możemy definiować. (...) Z uwagi na to, że jest to klient uniwersalny, można go użyć nie tylko do testowania serwera Apache, ale także do badania wydajności dowolnego innego serwera WWW.” Program ten jest dystrybuowany jako element serwera Apache.

Poniższe informacje zostały opracowane na podstawie ab w wersji 2.0.40-dev (Revision: 1.146).

Sposób użycia

Najprostszy sposób użycia tego programu polega na podaniu adresu, który ma zostać pobrany, jako parametru. Adres ten powinien składać się przynajmniej z nazwy hosta zakończonej ukośnikiem (ukośnik będzie w tym przypadku stanowił ścieżkę do zasobu na serwerze; w przypadku jego braku zostanie wyświetlony komunikat błędu invalid URL):

ab example.com/

Oczywiście nic nie stoi na przeszkodzie, aby podać również określenie protokołu oraz port:

ab http://example.com:80/

Wykonanie dowolnego z powyższych poleceń spowoduje wykonanie jednego żądania HTTP na serwerze example.com i wyświetlenie statystyk dla niego. Jest to wystarczające, aby sprawdzić, czy serwer jest aktywny i generuje poprawne odpowiedzi, jednak zbyt mało, by wysnuć jakiekolwiek wnioski na temat statystyk jego pracy. W celu otrzymania reprezentatywnej próby niezbędne jest podanie dodatkowych parametrów. Za pomocą przełącznika -n możemy określić liczbę żądań do wykonania. Domyślnie są one wykonywane jedno po drugim, jednak podając dodatkowo parametr -c można uruchomić kilka równoległych wątków, które będą odpytywać serwer w tym samym czasie. Dla przykładu komenda

ab -n 100 -c 10 http://example.com/

spowoduje stukrotne pobranie strony spod adresu http://example.com/, przy czym jednocześnie będzie wykonywanych maksymalnie 10 żądań.

Jeśli całkowita liczba żądań (parametr -n) będzie większa niż 150, program ab po wykonaniu każdych stu z nich będzie wyświetlał na standardowym wyjściu błędów informacje o postępach, np. Completed 100 requests. Komunikaty te pozwalają na bieżąco orientować się w przebiegu testów. Istnieje możliwość wyłączenia ich za pomocą parametru -q.

Odczytywanie wyników pomiarów

Po przeprowadzeniu nakazanych testów, program ab wyświetla raport, który może wyglądać podobnie do poniższego:

Server Software:        Apache/2.2.3
Server Hostname:        example.com
Server Port:            80

Document Path:          /
Document Length:        438 bytes

Concurrency Level:      10
Time taken for tests:   111.737800 seconds
Complete requests:      110
Failed requests:        0
Write errors:           0
Total transferred:      77110 bytes
HTML transferred:       48180 bytes
Requests per second:    0.98 [#/sec] (mean)
Time per request:       10157.982 [ms] (mean)
Time per request:       1015.798 [ms] (mean, across all concurrent requests)
Transfer rate:          0.67 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:      183 4386 8433.4    188   21186
Processing:   188  208  72.0    189     844
Waiting:      185  205  71.9    186     840
Total:        375 4595 8424.6    379   21383

Percentage of the requests served within a certain time (ms)
  50%    379
  66%    387
  75%    520
  80%  21361
  90%  21367
  95%  21369
  98%  21370
  99%  21375
 100%  21383 (longest request)

Zawiera on informacje takie jak:

Po nich następuje tabela z zestawieniem czasów. Wyszczególnione zostały w niej minimalne wartości, średnie arytmetyczne (z odchyleniami standardowymi), mediany oraz maksymalne wartości dla następujących czasów:

Ostatnia część raportu jest zatytułowana „Ilość żądań wykonana w określonym czasie”. Dodać należy, że jest to czas względem najdłuższego żądania. Podawane jest, ile żądań trwało mniej lub tyle samo, ile wynosi połowa czasu najdłuższego żądania. Następnie to samo jest podawane dla czasu stanowiącego 66% czasu najdłuższego żądania, 75%, 80%, 90% itd. Ten fragment raportu można wyłączyć za pomocą przełącznika -d.

Omówienie parametrów

Poza parametrami wymienionymi powyżej, ApacheBench można dostosować do potrzeb użytkownika również za pomocą następujących przełączników:

Format pliku TSV

Program ab generuje plik w formacie TSV (Tab Separated Values – wartości rozdzielone znakami tabulacji) przy uruchomieniu z parametrem -e i podaniu nazwy pliku wyjściowego. Plik ten składa się z wierszy. Każdy z nich (począwszy od drugiego) odpowiada jednemu żądaniu i zawiera sześć wartości zmierzonych podczas jego wykonywania. Wartości te są oddzielone od siebie znakami tabulacji (kod 09 w tablicy ASCII) – stąd nazwa formatu pliku. Znaki te sprawiają, że oglądając plik w dowolnym edytorze tekstu widzimy wartości ułożone w sześciu kolumnach. Znaczenie poszczególnych wartości zostało bardzo enigmatycznie wyjaśnione w pierwszej linii pliku. Znajdują się tam nazwy kolumn. Oto one:

Niestety, są to wszystkie informacje, które dostajemy od twórców ApacheBench. Nie znajdziemy dodatkowych wyjaśnień ani w oficjalnym podręczniku użytkownika (tzw. manuale), ani w tekstach wyświetlanych przez program. Pozostaje jedynie zajrzeć do kodu tej aplikacji. Po jego analizie można wywnioskować, co dokładnie jest zapisane w pliku TSV:

Wszystkie czasy podawane są w milisekundach.

Przypisy

  1. ↑ Peter Wainwright, „Apache 2.0 dla zaawansowanych”, Helion, Gliwice, 2003
  2. ↑ Znaczenie tych wartości nie jest podane w oficjalnej dokumentacji programu ab. Zostało ono ustalone na podstawie analizy źródeł programu (źródła te są dystrybuowane w ramach źródeł serwera Apache, które można pobrać ze strony projektu). Wiele wyjaśniają zwłaszcza następujące linie z pliku ab.c: 1261 (w której na podstawie znaczników czasowych zapisywanych podczas komunikacji z serwerem obliczane są wartości czasów Connect, Processing, Waiting i Total) oraz 235 (w której znajdują się komentarze wyjaśniające, co zawierają znaczniki czasowe używane w linii 1261) (podane numery linii dotyczą ab w wersji 2.0.40-dev, revision 1.146).
  3. ↑ T. Berners-Lee, L. Masinter, M. McCahill, „Uniform Resource Locators (URL)”, dokument dostępny w wielu miejscach w Internecie, np. http://www.faqs.org/rfcs/rfc1738