Siege i Httperf - testowanie serwerów
14 July 2008
Comments
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
- -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
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
- 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
Comment article