Apache ab: proszę wyjaśnić wynik

31

Rozejrzałem się i nie mogę znaleźć żadnego szczegółowego wyjaśnienia wyników. Większość jest rzeczywiście łatwa do zrozumienia, ale jedna część mnie flummoxuje:

Time per request:       109537.505 [ms] (mean)
Time per request:       109.538 [ms] (mean, across all concurrent requests)

Dla mnie oznacza to, że jeśli mierzysz wszystkie równoczesne żądania (cokolwiek to oznacza), wówczas żądania są nagle zwracane 100 razy szybciej. Dlaczego czas na żądanie miałby tak bardzo się zmieniać? To nie ma sensu.

Czy jest jakieś szczegółowe wyjaśnienie tej i innych części wyniku ab?

Mei
źródło

Odpowiedzi:

53

Jeśli masz współbieżność ustawioną na 1, nie ma między nimi żadnej różnicy . To zaczyna mieć znaczenie, gdy wykonano więcej niż 1 żądanie jednocześnie.

Spójrzmy na przykład tego, co dostaję na moim localhost:

ab -c 1 -n 1000 http://localhost/

da:

Time taken for tests:   3.912 seconds
Time per request:       3.912 [ms] (mean)
Time per request:       3.912 [ms] (mean, across all concurrent requests)

Oznacza to, że do wykonania 1000 żądań pojedynczo potrzeba było 3,912 sekund. Tak więc pojedyncze żądania wymagały średnio 3,912 sekund / 1000 = 3,912 ms.

Teraz nieco zwiększmy poziom współbieżności:

ab -c 10 -n 1000 http://localhost/

Time taken for tests:   0.730 seconds
Time per request:       7.303 [ms] (mean)
Time per request:       0.730 [ms] (mean, across all concurrent requests)

Tym razem zamiast 3,912 sekund potrzebujemy tylko 0,730 sekund, aby wykonać zadanie. Wykonaliśmy 1000 żądań w 0,730 sekund, więc jedno żądanie zajmie średnio 0,730 sekund / 1000 = 0,730 ms (ostatnia linia). Ale sytuacja jest nieco inna, ponieważ obecnie wykonujemy 10 żądań jednocześnie. Tak więc w rzeczywistości nasz numer nie odzwierciedla rzeczywistego czasu potrzebnego na wypełnienie jednego żądania . 0,730 ms * 10 (liczba jednoczesnych żądań) = 7,303 ms. Jest to czas, który średnio zajmuje wykonanie pojedynczego żądania, jeśli zostało ono wykonane równolegle (lub dokładniej, w sposób izolowany na bieżącym poziomie współbieżności).

Ostatnia liczba, którą widzisz (0,730 ms) jest używana, aby powiedzieć w przybliżeniu, ile całkowity czas by się wydłużył, gdybyś dodał 1 żądanie ( -n 1001) przy użyciu obecnego poziomu współbieżności -c 10(przynajmniej teoretycznie tak jest).

7,303 ms daje przegląd czasu trwania pojedynczego pojedynczego żądania.

Zmiana widoczna między przykładem -c 1a -c 10:

[-c 1 ]: Time per request:       3.912 [ms] (mean)
[-c 10]: Time per request:       7.303 [ms] (mean)

oznacza, że ​​pojedyncze żądanie działa szybciej, jeśli jest ono jedyne wykonywane -c 1. Jeśli -c 10o zasoby konkuruje wiele żądań , wykonanie jednego żądania potrwa dłużej. Ale jeśli weźmiesz pod uwagę fakt, że wykonujesz 10 takich żądań jednocześnie, w tym 7,303 ms masz do czynienia z 10 żądaniami zamiast 1.

Zatem jako miarę opóźnienia dla pojedynczego żądania - 7,303 ms jest bardziej przydatne. Ale jako miarę wydajności - 0,730 ms ma większe znaczenie. W rzeczywistości, gdy 0,730 ms <3,912 ms widzisz, że będziesz w stanie obsłużyć więcej żądań na sekundę łącznie, jeśli zezwolisz na 10 równoczesnych żądań.

Karol J. Piczak
źródło