2012-04-18 14 views
5

Mam problem z wydajnością (Hi-CPU) w mojej aplikacji serwera. Ale problem pojawia się tylko wtedy, gdy serwer działa przez długi czas (średnio tydzień). Próbowałem użyć wbudowanego profilera Netbeans do zdiagnozowania problemu, ale po uruchomieniu przez kilka godzin po prostu przestał odpowiadać.Czy istnieje długoterminowy profiler Java lub rejestrator wydajności?

Czy istnieje sposób na długoterminowe monitorowanie aplikacji? Dzięki.

UPDATE: Nie jest to aplikacja internetowa

Odpowiedz

4

Należy przyjrzeć Visual VM jeśli miałaś to zrobione (jeśli jesteś na JDK 6 Update 7 lub powyżej). Jestem pewien, że będzie to dość pocieszające od czasu "dostosowania" profilera Netbeans do rdzenia Java.

0

Nie wiem zbyt wiele o narzędziach do profilowania, więc nie zamierzam polecać narzędzia do profilowania.

Zamiast tego, użyłbym AspectJ do wstrzyknięcia logowań (Log4j) do mojego kodu. Jeśli wiesz o pewnych obszarach, o których wiesz, że chcesz monitorować, po prostu wprowadź dane logowania w tych konkretnych punktach. W przeciwnym razie, jeśli chcesz spojrzeć na wszystko, możesz uogólnić swoje punkty i wstrzyknąć wszystko.

Odbierz dzienniki przez tydzień, a następnie sprawdź, co może zachowywać się "nieregularnie". Te pliki dziennika będzie prawdopodobnie dość długi w zależności od tego, co zdecydujesz się zalogować, więc może trzeba użyć jakiś plik parsowania zbierać informacje, takie jak:

  • # połączeń z każdej metody
  • czasu pomiędzy pewnych wywołań metod
  • Jestem pewien, że można myśleć o innych na podstawie znajomości specyfiki aplikacji

Porównanie tych liczb z początku tygodnia, gdy z tych nurkowań skuteczności. Jeśli dostaniesz zauważalne trafienia wydajnościowe, to wyobrażam sobie, że będą one w oczywisty sposób odzwierciedlone w plikach logów tego typu.

Może to być nieco więcej pracy niż uruchamianie narzędzia profilowania poza polem, ale jest dość elastyczne i może być dobrym doświadczeniem, jeśli wcześniej nie zrobiłeś wiele z AspectJ.

0

Istnieje oferta komercyjna, którą można rozważyć pod adresem DynaTrace od firmy Compuware. Nie pracuję i nigdy nie pracowałem dla lub z Compuware, jednak moja obecna organizacja rozważa obecnie użycie Dynatrace w naszym środowisku produkcyjnym.

W zależności od typu uruchomionej aplikacji Java, niezależnie od tego, czy jest to instalacja oparta na komputerze, czy na serwerze, instalacja spowoduje dodanie słoika do ścieżki klasy (plus dodanie urządzenia sieciowego do sieci). Uruchomienie aplikacji spowodowałoby przesłanie danych oprzyrządowania na serwery Dynatrace, gdzie można je pobrać, a nawet śledzić ścieżki i transakcje poszczególnych użytkowników przez cały system (niezależnie od zastosowanej technologii).

Dynatrace jest czymś, co mógłbym sobie wyobrazić pozostawiając uruchomiony przez cały czas, a nie tylko wtedy, gdy chcesz zdiagnozować konkretny problem.Również Dynatrace nie jest tani - prawdopodobnie patrzysz na 5-cio cyfrowy koszt na serwer, jednak z tego, co widziałem, wydaje się działać prawie jak permanentnie działający debugger, ale bez nadmiernego nakładu pracy (< 5%).

Nie wiem dokładnie, jakiego typu aplikacji używasz, ale nasza to aplikacja internetowa oparta na Java EE, współpracująca z niektórymi z naszych serwerów zaplecza.

HTH

1

Napisałem wydajności funkcji rejestratora że próbki metryki takich jak procesor, pamięć i wątków liczyć i dzienniki ich za pomocą log4j. Porównując dzienniki wydajności z dziennikami aplikacji, można łatwo wykryć wzorce wydajności i profilować aplikację. Cieszyć się!

Performance-Logger

Powiązane problemy