2013-09-23 15 views
9

Trudno znaleźć wszystkie wąskie gardła, zakleszczenia i wycieki pamięci w aplikacji Java za pomocą samych testów jednostkowych.Testy wydajności/wytrzymałościowe Aplikacje Java EE

Chciałbym dodać pewien poziom testów warunków skrajnych dla mojej aplikacji. Chcę przetestować ograniczenia aplikacji i określić, jak reaguje ona przy dużym obciążeniu.

Chciałbym ocenić następujące:

  • Dostępny pod dużym obciążeniem
  • Wydajność przy dużym obciążeniu
  • pamięci/procesora/Disk Usage pod dużym obciążeniem
  • Czy katastrofy pod wysokim ładuj lub reaguj z wdziękiem:

Interesujące byłoby również zmierzenie i skontrastowanie takich cech w normie al obciążenie.

Czy są dobrze znane, standardowe techniki radzenia sobie ze stresem? Szukam pomocy/kierunku w tworzeniu takiego środowiska. Idealnie, chciałbym regularnie przeprowadzać te testy, aby firma Wecan mogła ustalić, czy ostatnie dostawy wpływają na wydajność.

+2

Polecam Apache JMeter http://jmeter.apache.org/ jako doskonałe narzędzie do testowania warunków skrajnych dla aplikacji internetowych. Jest łatwy w użyciu i można go również rozszerzyć. – Rami

+0

Znalazłem również Gatling (http://gatling.io) jako doskonałe narzędzie. – cmd

Odpowiedz

0

Istnieją głównie dwa podejścia do świadczenia usług na aplikację:

test wydajności i przetestować system

Jak one różnią? Cóż, jest to łatwe, opiera się na ich zasięgu, zakres testów wydajności jest ograniczony i jest wysoce nierealistyczny. Przykład: przetestuj program obsługi IncomingMessage w niektórych aplikacjach X, w tym celu skonfiguruj test, który wyśle ​​wiadomości do tego programu obsługi na podstawie X, Y, Z. Takie podejście pomoże ci określić problemy i zmierzyć wydajność poszczególnych i ograniczonych stref w twojej aplikacji.

To powinno teraz doprowadzić Cię do pytania, więc czy testowanie wydajności i wydajność testuję każdy z komponentów w mojej aplikacji indywidualnie? Tak, jeśli uważasz, że zachowanie komponentu ma kluczowe znaczenie, a zmiany w nowszych wersjach prawdopodobnie spowodują nałożenie kar. Ale jeśli chcesz poczuć swoją aplikację jako całość, zespół komponentów wchodzących w interakcje ze sobą i zobaczyć, jak wydajność wyjdzie, musisz przetestować system.

Test systemowy zawsze będzie się starał replikować jak najbliżej dowolnego środowiska produkcyjnego klienta. Tutaj możesz obserwować, jak wygląda rzeczywistość w Twojej aplikacji i postępować zgodnie z nią.

Podsumowując, skonfiguruj test systemowy na swojej aplikacji i zmierz, co chciałeś powiedzieć. Następnie podkreśl system jako całość i zobacz, jak zareaguje, będziesz zaskoczony wynikiem.

Wreszcie, test wydajności pojedynczo wszystkich krytycznych elementów, które zidentyfikowałeś lub chciałbyś śledzić w swojej aplikacji.

Jako ogólną wytyczną, przy wykonywaniu należy zawsze: 1.- Uzyskaj linię bazową systemu w stanie bezczynności. 2.- Uzyskaj linię podstawową dla systemu przy normalnym oczekiwanym obciążeniu. 3.- Uzyskaj linię bazową dla systemu w warunkach stresowych.

Należy pamiętać, że wyniki Normalnego obciążenia powinny być ekstrapolowane na warunki naprężenia, a ładny układ zawsze będzie taki, który skaluje się liniowo.

Mam nadzieję, że to pomoże.

P.S. Testy, ustawienia środowiskowe, a nawet zbieranie danych powinny być w pełni zautomatyzowane, jak to możliwe, to pomoże ci to uruchomić i poświęcić czas na diagnozowanie problemów z wydajnością, a nie konfigurowanie testu.

5

Jestem wielkim fanem JMeter. Możesz skonfigurować połączenia bezpośrednio z serwerem, tak jak użytkownicy mieli do niego dostęp. Możesz kontrolować liczbę użytkowników (współbieżne wątki) i dostęp. Może śledzić przepływ pracy, skreślając odpowiednią stronę informacyjną na stronie. Zajmuje od 1 do 2 dni, aby nauczyć się go na tyle dobrze, aby być produktywnym. (Możesz zrobić podstawy w ciągu godziny od pobrania!)

Co do tego, jak to wszystko wpływa na serwer, jest to trudniejsze pytanie. Użyłem profesjonalnych narzędzi od CA i IBM. (Rysuję puste miejsce na nazwach konkretnych narzędzi - być może ze względu na PTSD!) Użyłem profilowanych profilerów JVM. Użyłem natywnego linuksa i narzędzi Windows. Jeśli nie jesteś zbyt zajęty profilowaniem, które części aplikacji powodują problemy, możesz po prostu użyć rodzimych narzędzi do systemu operacyjnego do monitorowania procesora/pamięci/IO.

+0

Jeśli chodzi o "Interesujące byłoby mierzenie i porównywanie takich cech pod normalnym obciążeniem." Zapraszam do sprawdzenia danych: http://metrics.dropwizard.io/3.1.0/ – lrn2prgrm