Siege i Httperf - testowanie serwerów

Siege i Httperf to narzędzia do testowania serwerów www, a dokładniej aplikacji serwowanych przez te serwery. Poddają one serwer dużemu obciążeniu, co pozwala nam sprawdzić jak zachowuje się nasza aplikacja w takich warunkach.

Siege

Siege to wielowątkowa aplikacja poddająca serwer dużemu obciążeniu i mierząca parametry określające jego wydajność. Przykładowe zastosowanie:
siege --time=60S http://localhost/strona/
Co spowoduje przeprowadzenie 60 sekundowego testu polegającego na wysyłaniu żadań i odbieranie strony o podanym adresie URL. W efekcie otrzymamy wynik w postaci:
Transactions:                   1666 hits
Availability:                 100.00 %
Elapsed time:                  59.94 secs
Data transferred:               8.59 MB
Response time:                  0.03 secs
Transaction rate:              27.79 trans/sec
Throughput:                     0.14 MB/sec
Concurrency:                    0.80
Successful transactions:        1666
Failed transactions:               0
Longest transaction:           0.43
Shortest transaction:           0.01
  • Transactions - Ilość wywołań serwera
  • Availability - Procentowy udział połączeń na gnieździe, które zostały poprawnie obsłużone przez serwerem. Nie uwzględnia błędów 400 i 500 (uwzględniane w "Failed transactions")
  • Elapsed time - Czas trwania testu
  • Data transferred - Ilość danych odebranych przez każdego symulowanego użytkownika
  • Response time - Średni czas odpowiedzi serwera na żądanie
  • Transaction rate - Średnia ilość żądań obsłużonych przez serwer w czasie sekundy
  • Throughput - Średnia ilość bajtów przesłana do wszystkich symulowanych użytkowników w czasie sekundy
  • Concurrency - Średnia ilość jednoczesnych połączeń. Wzrasta wraz ze spadkiem wydajności serwera
  • Successful transactions - Ile razy serwer odpowiedział ze statusem < 400
  • Failed transactions - Ile razy serwer zwrócił odpowiedź ze statusem >= 400 plus suma nieudanych połączeń na gnieździe
  • Longest transaction - Czas trwania najdłuższej transakcji
  • Shortest transaction - Czas trwania najkrótszej transakcji
Siege przyjmuje szereg parametrów określających działanie aplikacji:
  • -C, --config - wyświetla zawartość pliku konfiguracyjnego $HOME/.siegerc (tworzy jeżeli nie istnieje)
  • -v, --verbose - wyświetla nagłówki HTTP i żądania GET w czasie testu
  • -g, --get - pobiera nagłówki z serwera i wyświetla transakcję HTTP
  • -c NUM, --concurrent=NUM - Ilość symulowanych użytkowników
  • -i, --internet - losowo pobiera strony określone w pliku urls.txt
  • -d NUM, --delay=NUM - Każdy symulowany użytkownik pauzuje od 0 do NUM sekund
  • -b, --benchmark - Przeprowadza test bez opóźnień w działaniu symulowanych użytkowników
  • -r NUM, --reps=NUM - NUM określa ilość powtórzeń
  • -t NUMm, --time=NUMm - Pozwala prowadzić test przez określony czas: -t***S/M/H gdzie *** to liczba określająca czas a S/M/H odpowiednio oznaczają sekundy, minuty i godziny


Httperf

Httperf pozwala na uzyskanie bardziej szczegółowych informacji. Oto przykładowy wynik:
httperf --client=0/1 --server=localhost --port=80 --uri=/ --send-buffer=4096 --recv-buffer=16384 --num-conns=1 --num-calls=100
Maximum connect burst length: 0

Total: connections 1 requests 100 replies 100 test-duration 4.117 s

Connection rate: 0.2 conn/s (4116.9 ms/conn, <=1 concurrent connections)
Connection time [ms]: min 4116.9 avg 4116.9 max 4116.9 median 4116.5 stddev 0.0
Connection time [ms]: connect 0.1
Connection length [replies/conn]: 100.000

Request rate: 24.3 req/s (41.2 ms/req)
Request size [B]: 60.0

Reply rate [replies/s]: min 0.0 avg 0.0 max 0.0 stddev 0.0 (0 samples)
Reply time [ms]: response 41.2 transfer 0.0
Reply size [B]: header 154.0 content 5405.0 footer 2.0 (total 5561.0)
Reply status: 1xx=0 2xx=100 3xx=0 4xx=0 5xx=0

CPU time [s]: user 0.50 system 1.10 (user 12.3% system 26.8% total 39.0%)
Net I/O: 133.3 KB/s (1.1*10^6 bps)

Errors: total 0 client-timo 0 socket-timo 0 connrefused 0 connreset 0
Errors: fd-unavail 0 addrunavail 0 ftab-full 0 other 0
Zacznijmy od wywołania, które zazwyczaj wygląda tak:
httperf --server=localhost --port=80 --uri=/ --num-conns=X --num-calls=Y
Gdzie:
  • --server=localhost - oznacza nazwę (host/domena) serwera
  • --port=80 - określa port na jakim serwer działa (80 domyślnie)
  • --uri=/ - odnośnik w obrębie serwera, który ma być żądany
  • --num-conns=X - Określa liczbę połączeń jaka zostanie stworzona w czasie testu. Dla każdego połączenia zostanie wykonanych --num-calls wywołań (żądań)
  • --num-calls=Y - Ile wywołań (żądań) wykonać dla każdego połączenia
A teraz wyniki. Total Section zawiera podsumwanie dotyczące połączeń TCP wykonanych przez httperf oraz całkowity czas trwania testu. Connection Section zawiera dane na temat połączeń TCP generowanych przez httperf, gdzie concurrent connections określa liczbę jednoczesnych połączeń (jednocześnie otwartych). Request Section zawiera zestawienie na temat żądań HTTP. Reply Section zawiera dane na temat odpowiedzi udzielanych przez serwer. Dane w tej grupie są dość ważne przy szacowaniu wydajności. Reply rate określa szybkość udzielania odpowiedzi na żądania. Reply Time określa czas potrzebny serwerowi na udzielenie odpowiedzi (czas do otrzymania pierwszego bajtu odpowiedzi). Reply status sumuje odpowiedzi pod względem kodu statusu jaki został zwrócony. Poprawna odpowiedź zwraca kod statusu 200. Miscellaneous Section zawiera pozostałe dane takie jak CPU time określające wykorzystanie procesora. Zazwyczaj będą to wartości bliskie 100% jako że httperf wykonuje wiele operacji. Niskie wartości mogą świadczyć o aktywności innych procesów sztucznie opóźniających httperf. Net I/O zawiera dane na temat przepustowości. Errors Section zawiera zestawianie błędów jakie pojawiły się w czasie przeprowadzania testu:
  • client-timo - Ile razy sesja, połączenie lub żądanie zawiodło z powodu przekroczenia czasu odpowiedzi określanego przez --timeout)
  • socket-timo - Ile razy połączenia TPC nie udały się z powodu przekroczenia czasu połączenia na poziomie gniazda
  • connrefused - Ile razy połączenia TPC nie powiodły się z powodu "connection refused by server" (ECONNREFUSED)
  • connreset - Ile razy połączenia TPC nie powiodły się z powodu RESETu z serwera
  • fd-unavail - Ile razy proces httperf pozostawał bez deskryptorów plików. Jeżeli wartość jest różna od zera wyniki są bezwartościowe
  • addrunavail - Ile razy klientowi brakowało numerów portów TPC. Jeżeli wartość jest różna od zera wyniki są bezwartościowe
  • ftab-full - Ile razy tabela deskryptorów plików była pełna. Jeżeli wartość jest różna od zera wyniki są bezwartościowe
  • other - Ile razy wystąpił jakiś inny błąd. Jeżeli wartość jest różna od zera należy znaleźć przyczynę błędu.
RkBlog

Wprowadzenie do świata Linuksa, 14 July 2008

Comment article
Comment article RkBlog main page Search RSS Contact