Apache Bench - Konfiguracja środowiska
W tym rozdziale poprowadzimy Cię, jak skonfigurować środowisko Apache Bench na serwerze VPS.
Wymagania systemowe
Memory - 128 MB
Disk Space - Brak wymagań minimalnych
Operating System - Brak wymagań minimalnych
Instalowanie Apache Bench
Apache Bench jest samodzielną aplikacją i nie ma żadnych zależności od instalacji serwera WWW Apache. Poniżej przedstawiono dwuetapowy proces instalacji Apache Bench.
Step 1 - Zaktualizuj bazę danych pakietów.
# apt-get update
Zwróć uwagę, że symbol # przed poleceniem terminala oznacza, że użytkownik root wydaje to polecenie.
Step 2 - Zainstaluj pakiet narzędzi apache2, aby uzyskać dostęp do Apache Bench.
# apt-get install apache2-utils
Apache Bench jest teraz zainstalowany. Jeśli chcesz przetestować aplikację internetową hostowaną na tym samym VPS, wystarczy zainstalować tylko serwer WWW Apache -
# apt-get install apache2
Będąc narzędziem Apache, Apache Bench jest automatycznie instalowany podczas instalacji serwera WWW Apache.
Weryfikacja instalacji Apache Bench
Zobaczmy teraz, jak zweryfikować instalację Apache Bench. Poniższy kod pomoże zweryfikować instalację -
# ab -V
Output
This is ApacheBench, Version 2.3 <$Revision: 1604373 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Kiedy zobaczysz powyższe dane wyjściowe terminala, oznacza to, że pomyślnie zainstalowałeś Apache Bench.
Tworzenie uprzywilejowanego użytkownika Sudo
Z punktu widzenia bezpieczeństwa uważa się, że dobrą praktyką dla administratora systemu jest utworzenie użytkownika sudo zamiast pracy jako root. Stworzymy użytkownika testowego, nazwanego test, w celu -
# useradd -m -d /home/test -g sudo test
Ustawmy hasło dla nowego użytkownika -
# passwd test
System poprosi o nowe hasło do testu użytkownika. Możesz wprowadzić proste hasło, ponieważ tylko testujemy, a nie wdrażamy na serwerze produkcyjnym. Zwykle polecenie sudo monituje o podanie hasła użytkownika sudo; zaleca się, aby nie używać skomplikowanego hasła, ponieważ proces staje się uciążliwy.
Output
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Testowanie strony Apache.org
W tej sekcji przetestujemy witrynę Apache.org. Przejdźmy najpierw do testu użytkownika sudo -
# su test
Na początek przetestujemy stronę organizacji Apache, https://www.apache.org/. Najpierw uruchomimy polecenie, a następnie zrozumiemy dane wyjściowe -
$ ab -n 100 -c 10 https://www.apache.org/
Tutaj -nto liczba żądań do wykonania podczas sesji testów porównawczych. Domyślnie wykonuje się tylko jedno żądanie, co zwykle prowadzi do niereprezentatywnych wyników testów porównawczych.
I -cjest współbieżnością i oznacza liczbę wielu żądań do wykonania jednocześnie. Domyślnie jest to jedno żądanie na raz.
Zatem w tym teście Apache Bench wyśle 100 żądań z współbieżnością 10 do serwera organizacji Apache.
Output
This is ApacheBench, Version 2.3 <$Revision: 1604373 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking www.apache.org (be patient).....done
Server Software: Apache/2.4.7
Server Hostname: www.apache.org
Server Port: 443
SSL/TLS Protocol: TLSv1.2,ECDHE-RSA-AES256-GCM-SHA384,2048,256
Document Path: /
Document Length: 58769 bytes
Concurrency Level: 10
Time taken for tests: 1.004 seconds
Complete requests: 100
Failed requests: 0
Total transferred: 5911100 bytes
HTML transferred: 5876900 bytes
Requests per second: 99.56 [#/sec] (mean)
Time per request: 100.444 [ms] (mean)
Time per request: 10.044 [ms] (mean, across all concurrent requests)
Transfer rate: 5747.06 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 39 46 30.9 41 263
Processing: 37 40 21.7 38 255
Waiting: 12 15 21.7 13 230
Total: 77 86 37.5 79 301
Percentage of the requests served within a certain time (ms)
50% 79
66% 79
75% 80
80% 80
90% 82
95% 84
98% 296
99% 301
100% 301 (longest request)
Po uruchomieniu naszego pierwszego testu łatwo będzie rozpoznać wzorzec użycia tego polecenia, który jest następujący:
# ab [options .....] URL
gdzie,
ab - Polecenie Apache Bench
options - flagi dla konkretnego zadania, które chcemy wykonać
URL - adres URL ścieżki, którą chcemy przetestować
Zrozumienie wartości wyjściowych
Musimy zrozumieć różne metryki, aby zrozumieć różne wartości wyjściowe zwracane przez ab. Oto lista -
Server Software - Jest to nazwa serwera WWW zwrócona w nagłówku HTTP pierwszego udanego powrotu.
Server Hostname - Jest to adres DNS lub IP podany w linii poleceń.
Server Port- Jest to port, z którym łączy się ab. Jeśli w wierszu poleceń nie zostanie podany żaden port, wartość domyślna to 80 dla http i 443 dla https.
SSL/TLS Protocol- jest to parametr protokołu negocjowany między klientem a serwerem. Zostanie wydrukowane tylko wtedy, gdy używany jest SSL.
Document Path - To jest identyfikator URI żądania przeanalizowany z ciągu wiersza poleceń.
Document Length- Jest to rozmiar w bajtach pierwszego pomyślnie zwróconego dokumentu. Jeśli długość dokumentu zmienia się podczas testowania, odpowiedź jest uważana za błąd.
Concurrency Level - Jest to liczba jednoczesnych klientów (odpowiednik przeglądarek internetowych) używanych podczas testu.
Time Taken for Tests - Jest to czas od momentu utworzenia pierwszego połączenia przez gniazdo do momentu odebrania ostatniej odpowiedzi.
Complete Requests - liczba otrzymanych pomyślnych odpowiedzi.
Failed Requests- liczba żądań uznanych za niepowodzenia. Jeśli liczba jest większa niż zero, zostanie wydrukowany inny wiersz zawierający liczbę żądań, które nie powiodły się z powodu połączenia, odczytu, nieprawidłowej długości treści lub wyjątków.
Total Transferred- całkowita liczba bajtów odebranych z serwera. Ta liczba jest w zasadzie liczbą bajtów przesłanych przez kabel.
HTML Transferred- Całkowita liczba bajtów dokumentów odebranych z serwera. Ta liczba nie obejmuje bajtów odebranych w nagłówkach HTTP
Requests per second- To jest liczba żądań na sekundę. Ta wartość jest wynikiem podzielenia liczby żądań przez łączny czas potrzebny.
Time per request- średni czas spędzony na żądanie. Pierwsza wartość jest obliczana za pomocą formuły współbieżność * czas podjęte * 1000 / zrobione, a druga wartość jest obliczona według formuły czas podjęte * 1000 / zrobione
Transfer rate - Stawka transferu wyliczona według wzoru totalread / 1024 / timesaken.
Szybka analiza wyników testu obciążenia
Dowiedziawszy się o nagłówkach wartości wyjściowych z polecenia ab, spróbujmy przeanalizować i zrozumieć wartości wyjściowe dla naszego początkowego testu -
Organizacja Apache używa własnego oprogramowania serwera WWW - Apache (wersja 2.4.7)
Serwer nasłuchuje na porcie 443 z powodu protokołu HTTPS. Gdyby to był http, byłoby to 80 (domyślnie).
Łączna liczba przesłanych danych to 58769 bajtów na 100 żądań.
Test zakończony w 1,004 sekundy. Brak nieudanych żądań.
Żądania na sekundę - 99,56. Uważa się, że jest to całkiem dobra liczba.
Czas na żądanie - 100,444 ms (dla 10 jednoczesnych żądań). Zatem dla wszystkich żądań jest to 100,444 ms / 10 = 10,044 ms.
Szybkość przesyłania - odebrano 1338,39 [KB / s].
W statystykach czasu połączeń można zauważyć, że wiele żądań musiało czekać kilka sekund. Może to być spowodowane ustawieniem przez serwer WWW Apache żądań w kolejce oczekiwania.
W naszym pierwszym teście przetestowaliśmy aplikację (tj. Www.apache.org) hostowaną na innym serwerze. W dalszej części samouczka będziemy testować nasze przykładowe aplikacje internetowe hostowane na tym samym serwerze, z którego będziemy przeprowadzać testy ab. Ma to na celu ułatwienie nauki i demonstrację. Idealnie, aby uzyskać dokładny pomiar, węzeł główny i węzeł testowy powinny być różne.
Aby lepiej nauczyć się ab, powinieneś porównać i obserwować, jak wartości wyjściowe zmieniają się w różnych przypadkach, w miarę postępów w tym samouczku.
Wykreślanie danych wyjściowych Apache Bench
Tutaj wykreślimy odpowiedni wynik, aby zobaczyć, ile czasu zajmuje serwer w miarę wzrostu liczby żądań. W tym celu dodamy-g opcja w poprzednim poleceniu, po której następuje nazwa pliku (tutaj out.data), w którym zostaną zapisane dane wyjściowe ab -
$ ab -n 100 -c 10 -g out.data https://www.apache.org/
Zobaczmy teraz out.data zanim utworzymy działkę -
$ less out.data
Output
starttime seconds ctime dtime ttime wait
Tue May 30 12:11:37 2017 1496160697 40 38 77 13
Tue May 30 12:11:37 2017 1496160697 42 38 79 13
Tue May 30 12:11:37 2017 1496160697 41 38 80 13
...
Przyjrzyjmy się teraz nagłówkom kolumn w out.data plik -
starttime - To jest data i godzina rozpoczęcia rozmowy.
seconds - To samo co starttime, ale w uniksowym formacie timestamp (data -d @ 1496160697 zwraca wyjście starttime).
ctime - To jest czas połączenia.
dtime - To jest czas przetwarzania.
ttime - To jest czas całkowity (jest to suma czasu ctime i dtime, matematycznie ttime = ctime + dtime).
wait - To jest czas oczekiwania.
Aby uzyskać obrazową wizualizację tego, jak te liczne elementy są ze sobą powiązane, spójrz na poniższy obraz -
Jeśli pracujemy nad terminalem lub gdzie grafika nie jest dostępna, gnuplotto świetna opcja. Szybko to zrozumiemy, wykonując następujące kroki.
Pozwól nam zainstalować i uruchomić gnuplot -
$ sudo apt-get install gnuplot
$ gnuplot
Output
G N U P L O T
Version 4.6 patchlevel 6 last modified September 2014
Build System: Linux x86_64
Copyright (C) 1986-1993, 1998, 2004, 2007-2014
Thomas Williams, Colin Kelley and many others
gnuplot home: http://www.gnuplot.info
faq, bugs, etc: type "help FAQ"
immediate help: type "help" (plot window: hit 'h')
Terminal type set to 'qt'
gnuplot>
Kiedy pracujemy nad terminalem i zakładając, że grafika nie jest dostępna, możemy wybrać głupi terminal, który będzie dawał dane wyjściowe w ASCII na samym terminalu. To pomaga nam zorientować się, jak wygląda nasza fabuła za pomocą tego szybkiego narzędzia. Przygotujmy teraz terminal do kreślenia ASCII.
gnuplot> set terminal dumb
Output
Terminal type set to 'dumb'
Options are 'feed size 79, 24'
Ponieważ nasz terminal gnuplot jest teraz gotowy do kreślenia ASCII, wykreślmy dane z pliku out.data plik -
gnuplot> plot "out.data" using 9 w l
Output
1400 ++-----+------+-----+------+------+------+------+-----+------+-----++
+ + + + + + +"out.data" using 9 ****** +
| |
1200 ++ ********************************************
| ******************* |
1000 ++ * ++
| * |
| * |
800 ++ * ++
| * |
| * |
600 ++ * ++
| * |
| * |
400 ++ * ++
| * |
200 ++ * ++
| * |
+**** + + + + + + + + + +
0 ++-----+------+-----+------+------+------+------+-----+------+-----++
0 10 20 30 40 50 60 70 80 90 100
Wykreśliliśmy ttime, czas całkowity (w ms) z kolumny 9 w odniesieniu do liczby żądań. Możemy zauważyć, że w pierwszych dziesięciu wniosków, całkowity czas był w prawie 100 ms, przez 30 kolejnych wniosków (od 10 th do 40 th ), wzrosła do 1100 ms, i tak dalej. Twoja fabuła musi się różnić w zależności od twojegoout.data.