Testowanie obciążenia za pomocą AB… fałszywe nieudane żądania (długość)

209

Aby wykonać test obciążenia, dla własnej ciekawości, na moim serwerze uruchomiłem:

ab -kc 50 -t 200 http://localhost/index.php

To otwiera 50 utrzymywanych połączeń na 200 sekund i po prostu uderza mój serwer prośbami o index.php

W moich wynikach otrzymuję:

Concurrency Level:      50
Time taken for tests:   200.007 seconds
Complete requests:      33106
Failed requests:        32951
   (Connect: 0, Receive: 0, Length: 32951, Exceptions: 0)
Write errors:           0
Keep-Alive requests:    0
Total transferred:      1948268960 bytes
HTML transferred:       1938001392 bytes
Requests per second:    165.52 [#/sec] (mean)
Time per request:       302.071 [ms] (mean)
Time per request:       6.041 [ms] (mean, across all concurrent requests)
Transfer rate:          9512.69 [Kbytes/sec] received

Zwróć uwagę na 32951 „nieudane” żądania. Nie mogę tego rozgryźć.

Gdy test był uruchomiony, byłem w stanie uzyskać doskonały dostęp do mojej strony internetowej z komputera domowego, chociaż czasy ładowania strony na dole strony były zgłaszane jako .5 zamiast zwykłego .02. Jednak nigdy nie miałem nieudanej prośby.

Dlaczego więc AB zgłasza, że ​​połowa połączeń kończy się niepowodzeniem? A co w tym kontekście oznacza „Długość:”?

Benzoes
źródło
Czy Twoja witryna ma moduł równoważenia obciążenia? Zobacz mój post na blogu na temat testowania obciążenia z modułami równoważenia obciążenia, które mogą wyjaśnić sytuację „działa dla mnie” podczas testowania obciążenia.
Patrick Lightbody

Odpowiedzi:

361

Nieważne. „Błąd długości” wskazuje jedynie, że około połowa czasu trwania odpowiedzi była inna.

Ponieważ zawartość jest dynamiczna, prawdopodobnie jest to identyfikator sesji lub coś w tym rodzaju.

Jeff Atwood
źródło
8
Hej, właśnie natrafiłem na ten sam „problem” i cieszę się, że ta odpowiedź była tutaj. Dzięki!
Richard Hurt
2
Dzięki za odpowiedź, miałem dokładnie taką samą wątpliwość.
Saiyine
63
Tak, dwa lata później ta odpowiedź jest nadal bardzo przydatna.
Sergi
11
Nie bądź zbyt szybki, aby przypisać to niedopasowaniom o zmiennej długości treści. ab nie zgłasza kodu statusu HTTP 500 jako błędów w podsumowaniu. Przyczyną niedopasowania długości może być prawdziwy błąd. Możesz użyć -v 4, aby uzyskać więcej informacji (lepszy potok do pliku, ponieważ będzie dużo wydruków).
Tal Lev-Ami
3
W rzeczywistości jest to wyjaśnione w podręczniku ab tutaj httpd.apache.org/docs/current/programs/ab.html „Jeśli długość dokumentu zmienia się podczas testowania, odpowiedź jest uważana za błąd”.
Joeахар Joe
132

Aby opisać problem innymi słowy:

Narzędzie analizy porównawczej apache (ab) zakłada, że ​​długość odpowiedzi będzie taka sama podczas całego testu. Przechowuje długość pierwszej odpowiedzi. Jeśli którakolwiek z dalszych odpowiedzi ma inną długość treści, skutkują „błędami długości”.

Poniższy raport o błędach Apache wydaje się potwierdzać, że: Błąd ASF 42040

Podsumowanie : Jeśli podajesz jakąkolwiek treść o zmiennej długości, prawdopodobnie powinieneś zignorować tego rodzaju niepowodzenia żądania ab.

Edycja : Ostatnio zauważyłem, że abpolecenie ma nową (przynajmniej dla mnie) opcję:

-l   Accept variable document length (use this for dynamic pages)

Widzę go w ab wersji 2.3 <$ Wersja: 1528965 $>, ale nie widzę go w ab wersji 2.3 <$ Wersja: 655654 $> , więc prawdopodobnie został dodany stosunkowo niedawno.

Dariusz Walczak
źródło
4
Dla każdego na Macu są szanse, że twoja wersja ab jest opóźniona i -l nie weźmie. Możesz zainstalować ze źródła lub przez homebrew, ale „brew install ab” nie działa, ponieważ jest częścią pakietu apache - możesz zainstalować za pomocą „brew install homebrew / apache / ab”.
netpoetica
8

Przykro mi, że wskrzesiłem stare pytanie, ale było to pierwsze, które pojawiło się w Google. Czasami błąd długości zgłoszony przez ab mógł być spowodowany prawdziwym problemem: jeśli połączenie zostanie zamknięte po stronie serwera, zanim klient nie otrzyma całkowitej ilości bajtów zadeklarowanych w nagłówku Content-Length. Może się tak zdarzyć, jeśli między klientem a serwerem istnieją inne podmioty, na przykład ręcznie naiwne usługi równoważenia obciążenia (mój przypadek).

zentrunix
źródło