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.