2009-09-13 12 views
16

Próbuję dowiedzieć się, jak korzystać z ApacheBench i sprawdzić moją stronę internetową. Zainstalowałem domyślny projekt strony (jest to ASP.NET MVC, ale proszę nie umieszczaj go na końcu, jeśli nie jesteś osobą .NET).Czy ktoś może wyjaśnić, co oznaczają te wyniki ApacheBench?

Nic nie zmieniłem. Dodaj nowy projekt. Ustaw confuration na RELEASE. Uruchom bez debugowania. (więc jest w trybie LIVE). Tak, dzieje się tak z wbudowanym serwerem internetowym, a nie z IIS, Apache lub cokolwiek innego.

Więc oto wyniki: -

C:\Temp>ab -n 1000 -c 1 http://localhost:50035/ 
This is ApacheBench, Version 2.3 <$Revision: 655654 $> 
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ 
Licensed to The Apache Software Foundation, http://www.apache.org/ 

Benchmarking localhost (be patient) 
Completed 100 requests 
Completed 200 requests 
Completed 300 requests 
Completed 400 requests 
Completed 500 requests 
Completed 600 requests 
Completed 700 requests 
Completed 800 requests 
Completed 900 requests 
Completed 1000 requests 
Finished 1000 requests 


Server Software:  ASP.NET 
Server Hostname:  localhost 
Server Port:   50035 

Document Path:  /
Document Length:  1204 bytes 

Concurrency Level:  1 
Time taken for tests: 2.371 seconds 
Complete requests:  1000 
Failed requests:  0 
Write errors:   0 
Total transferred:  1504000 bytes 
HTML transferred:  1204000 bytes 
Requests per second: 421.73 [#/sec] (mean) 
Time per request:  2.371 [ms] (mean) 
Time per request:  2.371 [ms] (mean, across all concurrent requests) 
Transfer rate:   619.41 [Kbytes/sec] received 

Connection Times (ms) 
       min mean[+/-sd] median max 
Connect:  0 0 1.1  0  16 
Processing:  0 2 5.5  0  16 
Waiting:  0 2 5.1  0  16 
Total:   0 2 5.6  0  16 

Percentage of the requests served within a certain time (ms) 
    50%  0 
    66%  0 
    75%  0 
    80%  0 
    90%  16 
    95%  16 
    98%  16 
    99%  16 
100%  16 (longest request) 

C:\Temp> 

Teraz nie jestem pewien dokładnie to, co powinno być patrząc na.

Po pierwsze, po liczbie żądań na sekundę. Więc jeśli mamy wymóg obsługi 300 reqs/sec, to czy to mówi, że obsługuje i średnio 421 odpowiedzi na sekundę?

Po drugie, jaki jest powód dodania większej liczby współbieżnych? W jaki sposób, jeśli mam 1000 trafień na 1 współbieżnie, jak to się różni od 500 na 2 równoczesnych? Czy jest to test, czy istnieje kod blokujący inne żądania?

Wreszcie, czy jest coś ważnego, co przegapiłem z wyników, które powinienem wziąć pod uwagę?

Dzięki :)

Odpowiedz

16

co jest powodem dodając więcej jednocześnie z gemcytabiną? Jak w przypadku, jeśli mam 1000 trafień na 1 równoczesnej, jak to się różni do 500 na 2 równoczesnych? Czy jest to test , jeśli istnieje jakiś kod, który blokuje inne żądania ?

To trochę o tym, tak: twoja aplikacja prawdopodobnie robi rzeczy, w których współistnienie może przysporzyć kłopotów.

Kilka przykładów:

  • strona próbuje uzyskać dostęp do pliku - blokując go w procesie; oznacza to, że jeśli inna strona musi uzyskać dostęp do tego samego pliku, będzie musiała poczekać, aż pierwsza strona skończy z nim pracować.
  • zupełnie taka sama dla dostępu do bazy danych: jeżeli jedna strona jest pisanie do bazy danych, istnieje jakiś rodzaj blokady mecanisms (czy to stół opartych lub wiersz oparte, czy cokolwiek, zależnie od DBMS)

Testowanie z jednym współbieżnym jest OK ... Tak długo, jak witryna nigdy nie będzie mieć więcej niż jednego użytkownika w tym samym czasie; co jest dość nierealistyczne, mam nadzieję, że dla ciebie.


Musisz myśleć o tym, ilu użytkowników będzie jednocześnie na miejscu, kiedy jest w produkcji - i dostosować współbieżność; pamiętaj tylko, że 5 użytkowników w tym samym czasie na Twojej stronie nie oznacza, że ​​musisz przetestować ze współbieżnością 5 z ab:

  • rzeczywistych użytkowników będzie czekać kilka sekund między każdą prośbą (czas, aby przeczytać strona, kliknij łącze, ...)
  • ab nie czeka w ogóle: za każdym razem, gdy strona jest ładowana (tzn. żądanie jest zakończone), uruchamia kolejne żądanie!


także dwie inne rzeczy:

  • ab tylko testy na jednej stronie - prawdziwi użytkownicy będą poruszać się na całej stronie, co może powodować problemy współbieżności nie musiałby podczas testowania tylko jeden strona
  • ab ładuje tylko jedną stronę: nie żąda zasobów zewnętrznych (pomyśl CSS, obrazy, JS, ...); co oznacza, że ​​będziesz mieć wiele innych żądań, nawet jeśli nie będzie to zbyt kosztowne, kiedy twoja strona jest w produkcji.

Jako marginesie: może chcesz przyjrzeć innych narzędzi, które mogą zrobić dużo bardziej kompletne testy, jak siege, Jmeter lub OpenSTA: ab jest naprawdę miłe, gdy chcesz mierzyć, jeśli coś zrobiłeś optymalizuje stronę lub nie; ale jeśli chcesz symulować "rzeczywiste" korzystanie z witryny, są one znacznie bardziej dostosowane.

8

Tak, jeśli chcesz wiedzieć, ile żądań na sekundę Twoja witryna może obsłużyć, spójrz na wiersz "Żądania na sekundę". W twoim przypadku jest to naprawdę proste, ponieważ masz ab z wynikiem równym 1. Każde zgłoszenie trwało średnio 2,371ms. 421 z nich, jeden po drugim, zająć 1 sekundę.

Naprawdę powinieneś zagrać na współbieżności, aby dokładnie ocenić pojemność twojej strony. Do pewnego stopnia współbieżności można się spodziewać zwiększenia wydajności, ponieważ wiele żądań jest obsługiwanych równolegle przez IIS. E.g. jeśli twój serwer ma wiele procesorów/rdzeni. Również jeśli strona opiera się na zewnętrznym IO (usługa warstwy pośredniej lub wywołania DB) procesor może działać na jednym żądaniu, a drugi czeka na zakończenie IO. W pewnym momencie żądania/s wyrównają się wraz ze wzrostem współbieżności, a zobaczysz wzrost opóźnienia. Zwiększyć współbieżność jeszcze bardziej, a zobaczysz spadek przepustowości (req/s), ponieważ serwer musi poświęcić więcej zasobów na żonglowanie wszystkimi tymi współbieżnymi żądaniami.

Wszystko, co powiedzieliśmy, większość twoich żądań wraca za około 2ms. Jest to dość szybkie, więc domyślam się, że nie ma zbyt wiele w zakresie wywołań DB lub middle-level, a twój system jest prawdopodobnie maksymalnie obciążony procesorem, gdy test jest uruchomiony (lub coś jest nie tak i bardzo szybko się zawiesza. jesteś pewien, że ab dostaje stronę odpowiedzi, do której zamierzasz? Czy jest to strona, którą uważasz, że testujesz 1204 bajty duże?). Co wywołuje inny punkt: sam ab również pochłania procesor, szczególnie po uruchomieniu współbieżności. Więc chcesz uruchomić ab na innej maszynie.

Również należy witryny wykonywanie połączeń zewnętrznych do usług warstwy pośredniej lub DB, chcesz dostosować machine.config, aby zoptymalizować liczbę wątków IIS przydziela: http://support.microsoft.com/default.aspx?scid=kb;en-us;821268

I tylko trochę Ciekawostki: Czas potrzebny statystyki są wykonywane z przyrostem ~ 16 ms, ponieważ wydaje się, że jest to ziarnistość użytego zegara. To znaczy. 80% twoich odpowiedzi nie zajęło 0 ms, zajęło to trochę czasu < 16 ms.

+0

Pozdrawiam kolega :) Nie mam żadnych baz danych ani usług warstwy pośredniej. To po prostu domyślny out of box standardowego projektu ASP.NET MVC. Po prostu próbuję zrozumieć, jak działa ApacheBench i jak mogę go użyć do prawdziwego benchmarkingu, itp. :) –

Powiązane problemy