Narzędzie testu porównawczego apache jest bardzo proste i chociaż daje solidne wyobrażenie o pewnej wydajności, złym pomysłem jest poleganie tylko na nim, jeśli planujesz wystawić witrynę na poważne obciążenie produkcyjne.
Powiedziawszy to, oto najczęstsze i najprostsze parametry:
-c
: ("Konkurencja"). Wskazuje, ilu klientów (osób / użytkowników) będzie odwiedzało witrynę w tym samym czasie. Podczas ab
uruchomień będą -c
pojawiać się klienci odwiedzający witrynę. To właśnie decyduje o poziomie stresu, jaki Twoja witryna będzie odczuwać podczas testu porównawczego.
-n
: Wskazuje, ile żądań zostanie złożonych. To decyduje tylko o długości testu. Wysoka -n
wartość z -c
wartością, którą może obsługiwać Twój serwer, jest dobrym pomysłem, aby upewnić się, że nie dojdzie do załamania pod wpływem długotrwałego stresu: wsparcie stresu przez 5 sekund niż przez 5 godzin nie jest tym samym.
-k
: Robi to przeglądarka funkcjonalna „KeepAlive” z natury. Nie musisz przekazywać wartości, -k
ponieważ jest ona „logiczna” (co oznacza: oznacza, że chcesz, aby Twój test używał nagłówka Keep Alive z HTTP i podtrzymywał połączenie). Ponieważ przeglądarki to robią i prawdopodobnie zechcesz symulować obciążenie i przepływ witryny z przeglądarek, zaleca się wykonanie testu porównawczego.
Ostatnim argumentem jest po prostu host. Domyślnie trafi protokół http: //, jeśli go nie określisz.
ab -k -c 350 -n 20000 example.com/
Wydając powyższe polecenie, uderzysz http://example.com/ z 350 jednoczesnymi połączeniami, aż do spełnienia 20 tysięcy żądań. Zostanie to zrobione za pomocą nagłówka Keep Alive.
Po zakończeniu procesu 20 tysięcy zapytań otrzymasz informację zwrotną na temat statystyk. Dzięki temu dowiesz się, jak dobrze działała strona pod obciążeniem, jakie stawiasz, gdy używasz powyższych parametrów.
Aby dowiedzieć się, ile osób witryna może obsłużyć w tym samym czasie, po prostu sprawdź, czy czasy odpowiedzi (średnie, minimalne i maksymalne czasy odpowiedzi, nieudane żądania itp.) To liczby, które witryna może zaakceptować (różne witryny mogą chcieć różnych prędkości). Możesz uruchomić narzędzie z różnymi wartościami -c, dopóki nie trafisz w miejsce, w którym powiesz „Jeśli go zwiększę, zaczyna otrzymywać nieudane żądania i pęka”.
W zależności od witryny oczekujesz średniej liczby żądań na minutę. Różni się tak bardzo, że nie będziesz w stanie tego symulować za pomocą ab. Pomyśl jednak o tym w ten sposób: jeśli przeciętny użytkownik będzie uderzał 5 żądań na minutę, a średni czas odpowiedzi, który uważasz za prawidłowy, wynosi 2 sekundy, oznacza to, że 10 sekund na minutę 1 użytkownik będzie na żądanie, co oznacza tylko 1/6 czasu trafi na stronę. Oznacza to również, że jeśli 6 użytkowników jednocześnie odwiedza witrynę za pomocą ab, prawdopodobnie będziesz mieć 36 użytkowników w symulacji, nawet jeśli poziom współbieżności (-c) wynosi tylko 6.
Zależy to od zachowania, jakiego oczekujesz od użytkowników korzystających z witryny, ale możesz je uzyskać z „Oczekuję, że mój użytkownik trafi X żądań na minutę i uważam, że średni czas odpowiedzi jest ważny, jeśli wynosi 2 sekundy”. Następnie po prostu zmodyfikuj swój poziom -c, aż osiągniesz 2 sekundy średniego czasu odpowiedzi (ale upewnij się, że maksymalny czas odpowiedzi i stddev są nadal ważne) i sprawdź, jak duży możesz zrobić -c.
Mam nadzieję, że wyjaśniłem to jasno :) Powodzenia
-l
opcję, jeśli strona ma zawartość dynamiczną, w ten sposób nie otrzymujesz wielu nieudanych żądań, ponieważ długość treści różni się między żądaniami.Najprostszym testem, jaki możesz wykonać, jest wykonanie 1000 żądań, po 10 naraz (co w przybliżeniu symuluje 10 równoczesnych użytkowników, którzy otrzymują po 100 stron - przez cały czas trwania testu).
-n 1000
to liczba żądań do złożenia.-c 10
mówi AB, aby wykonywał 10 żądań na raz, zamiast 1 na raz, aby lepiej symulować równoczesnych gości (w porównaniu z użytkownikami sekwencyjnymi).-k
wysyłaKeepAlive
nagłówek, który prosi serwer WWW, aby nie zamykał połączenia po wykonaniu każdego żądania, ale zamiast tego używał go ponownie.Wysyłam również dodatkowy nagłówek,
Accept-Encoding: gzip, deflate
ponieważ mod_deflate jest prawie zawsze używany do kompresji danych wyjściowych text / html 25% -75% - których efektów nie należy odrzucać ze względu na jego wpływ na ogólną wydajność serwera WWW (tj. może przesłać 2x dane w tym samym czasie itp.).Wyniki:
Dla najprostszej interpretacji zignoruj wszystko, ALE ta linia:
Pomnóż to przez 60, a otrzymasz swoje żądania na minutę.
Aby uzyskać rzeczywiste wyniki, musisz przetestować Wordpress zamiast jakiegoś statycznego pliku HTML lub index.php, ponieważ musisz wiedzieć, jak wszystko działa razem: w tym złożony kod PHP i wiele zapytań MySQL ...
Na przykład tutaj są wyniki testowania nowej instalacji Wordpressa w tym samym systemie i środowisku WAMP (używam WampDeveloper, ale są też Xampp, WampServer i inne) ...
To teraz 37x wolniej!
Po teście obciążenia można wykonać wiele czynności, aby poprawić ogólną wydajność (liczba żądań na sekundę), a także zwiększyć stabilność serwera WWW przy większym obciążeniu (np. Zwiększenie
-n
i-c
tendencja do awarii Apache), które: możesz przeczytać tutaj:Apache do testowania obciążenia za pomocą AB (Apache Bench)
źródło
Kroki konfigurowania Apache Bench (AB) w systemie Windows (IMO - zalecane).
Krok 1 - Zainstaluj Xampp.
Krok 2 - Otwórz CMD.
Krok 3 - Przejdź do miejsca docelowego stanowiska apache (
cd C:\xampp\apache\bin
) z CMDKrok 4 - Wklej polecenie (
ab -n 100 -c 10 -k -H "Accept-Encoding: gzip, deflate" http://localhost:yourport/
)Krok 5 - Zaczekaj na to. Jesteś skończony
źródło
Byłem również ciekawy, czy mogę zmierzyć szybkość mojego skryptu za pomocą apache abs, skryptu konstrukcyjnego / destrukcyjnego php lub rozszerzenia php.
dwa ostatnie zawiodły dla mnie: są przybliżone. po czym pomyślałem o wypróbowaniu „ab” i „abs”.
polecenie „ab -k -c 350 -n 20000 example.com/” jest piękne, ponieważ wszystko jest łatwiejsze!
ale czy ktoś pomyślał o „localhost” na dowolnym serwerze Apache, na przykład www.apachefriends.org?
powinieneś utworzyć folder taki jak „bench” w katalogu głównym, w którym masz 2 pliki: przetestuj „bench.php” i odwołaj się do „void.php”.
a następnie: przetestuj to!
bench.php
void.php
na pulpicie powinieneś użyć pliku .bat (w systemie Windows) w następujący sposób:
bench.bat
Teraz, jeśli uważnie zwrócisz uwagę ...
skrypt void nie daje zerowych wyników !!! WNIOSEK JEST: od drugiego wyniku pierwszy wynik powinien zostać zmniejszony !!!
tutaj mam:
90-17 = 73 wynik, którego oczekuję!
źródło
Testowanie interfejsu API przy użyciu samego ab nie wystarczy. Uważam jednak, że jest to świetne narzędzie, które daje podstawowe wyobrażenie o wydajności witryny.
Jeśli chcesz użyć polecenia ab w celu przetestowania wielu punktów końcowych interfejsu API z różnymi danymi w tym samym czasie w tle, musisz użyć polecenia „nohup”. Uruchamia dowolne polecenie nawet po zamknięciu terminalu.
Napisałem prosty skrypt, który automatyzuje cały proces, możesz go użyć: http://blog.ikvasnica.com/entry/load-test-multiple-api-endpoints-concurrently-use-this-simple-shell-script
źródło