RkBlog

Hardware, programming and astronomy tutorials and reviews.

Siege i Httperf - testowanie serwerów

Testowanie serwerów i aplikacji pod dużym obciążeniem

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
Siege przyjmuje szereg parametrów określających działanie aplikacji:

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: 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:
RkBlog

14 July 2008;

Comment article