2010-02-15 19 views
23

chcę uruchomić mojej aplikacji Java i dla danego obciążenia móc zobaczyć:Profilowanie Java - jak uzyskać metodę metodą analizy metod mojej aplikacji?

  • ile razy dana funkcja została wywołana
  • jak drogie każde wywołanie funkcji w ujęciu względnym (czyli jak długo każdy trwa do wykonania)

Wiem, gdzie szyjka butelki znajduje się w mojej aplikacji, ale potrzebuję znacznie bardziej drobnoziarnistego widoku, aby go zawęzić.

Dzięki

Edytuj jvisualvm wygląda narzędzia - to zidentyfikowano problem w około 30 sekund. Po prostu muszę wiedzieć, co "czas wolny" oznacza w kontekście profilu metody. Dziękujemy

+3

czas Własna jest czas realizacji, nie licząc zwanych metod. Przykład: metoda 'a()' wykonuje obliczenia, a także wywołuje metody 'b()' i 'c()'. Zatem czas jałowy 'a()' obejmuje obliczenia wykonywane przez 'a()', ale nie uwzględnia czasu spędzonego w 'b()' lub 'c()'. –

+0

dziękuję, tak właśnie myślałem – MalcomTucker

+0

@EliAcherkan Co masz na myśli przez "obliczenia"? Każda operacja z prymitywami? A co z tworzeniem nowego obiektu? Czy powinno to być włączone do czasu własnego? –

Odpowiedz

18

Najprostszym podejściem do programu działającego w java 6 od Sun jest użycie programu jvisualvm w jdk. Umożliwia dołączanie i profilowanie bez specjalnej konfiguracji.

+1

jvisualvm to najlepsze darmowe narzędzie w mojej opinii. Eclipse TPTP jest dość ciężki i nie jest łatwy w użyciu. – Lauri

+1

to małe narzędzie, dzięki. Tylko jedno pytanie, co oznacza "czas samotności" w kontekście profilu wątku? – MalcomTucker

2

Spójrz na Eclipse TPTP. Mogą zapewnić dokładnie to i wiele więcej dla każdej aplikacji uruchomionej z Eclipse.

+1

Projekt TPTP został zarchiwizowany w 2016 roku. Https://projects.eclipse.org/projects/tptp.platform –

11

Najprostszym sposobem jest użycie -prof, np: java -prof -jar yourjar.jar

To będzie drukować plik o nazwie java.prof po zakończeniu programu uruchomiony.

Zobacz HPROF documentation page

w mojej aplikacji używam: -Xrunhprof: cpu = próbki, gwint = y = y, doe

Drukuje raport, który zawiera, między innymi, w tym:

CPU SAMPLES BEGIN (total = 55110) Sun Feb 7 17:02:51 2010 
rank self accum count trace method 
1  69.68% 69.68% 38399 300361 java.net.SocketInputStream.socketRead0 
2  24.40% 94.08% 13448 300386 java.net.SocketInputStream.socketRead0 
3  0.20% 94.28%  108 300425 java.io.FileOutputStream.writeBytes 
4  0.19% 94.47%  107 300976 java.net.PlainDatagramSocketImpl.receive0 
5  0.19% 94.65%  102 300414 package.BlockingSampleBuffer.addSample 
6  0.16% 94.82%  90 300365 java.net.SocketOutputStream.socketWrite0 
7  0.16% 94.98%  89 300412 package.BlockingSampleBuffer.addSample 
8  0.15% 95.13%  84 300430 java.lang.Object.wait 
9  0.14% 95.27%  77 300592 java.io.FileOutputStream.writeBytes 
10  0.14% 95.41%  76 300566 java.lang.AbstractStringBuilder.<init> 

Możesz zobaczyć całkowity czas (w sekundach) spędzony na różnych metodach. W kopalni aplikacja spędza większość czasu, czekając na dane ze zdalnego hosta (mało prawdopodobne jest to przez połączenie internetowe).

+0

Świetne rzeczy. Dziękuję Ci! – silverbullettt

2

Jeśli jesteś gotów wydać trochę pieniędzy,

JProfiler: http://www.ej-technologies.com/products/jprofiler/overview.html

jest bardzo dobra, to pokazuje% czasu używany, absolutny czas używany i # w inwokacji do metody poziom. Rozumie połączenia EJB, wywołania serwisów internetowych, a nawet pokazuje SQL wywołań jdbc. Często go używam, aby znaleźć problemy z wydajnością.

Ma również profilowanie pamięci, ale profilowanie cpu jest znacznie bardziej użyteczne.

+0

Warto zauważyć, że jest to w zasadzie interfejs, który pokazuje wyjście do hprof (patrz wyżej), są wolne, ale te mniej interpretują/mniej ładnie. – gubby

4

Wymieniono kilka profilerów (The eclipse one and JProfiler). Chcę WYSOCE POLECAM, że profiler jest jednym z narzędzi w twoim pakiecie narzędzi programowania.

To jest coś, co większość programistów przechodzi, ale profiler może rozwiązać całe klasy problemów, które są bardzo trudne do rozwiązania w inny sposób.

Po prostu mówię (do wszystkich, nie tylko do pytającego), że jeśli nie korzystałeś z profilera, poszukaj go, pobierz i uruchom.

Nawiasem mówiąc, są one znacznie potężniejsze niż statyczne wyniki narzędzi java - chociaż narzędzia java mogą wystarczyć w tym konkretnym przypadku. Profiler może powiedzieć, co robi każdy wątek i może stworzyć całkiem fajną grafikę wywołania (styl diagramu przepływu), który pomoże ci analizować kod, którego nie pisałeś.

Wystarczy go znaleźć i używać przez tydzień lub dwa, aby wiedzieć, co oferuje.

0

To właśnie tam pomaga AOP. Aspekty można dodawać/usuwać bez zmiany kodu. Jeśli używasz Spring; utwórz Aspekt, w tym JoinPoint, Porada wymieniająca Klasy i publiczne metody, które mają na celu oszacowanie czasu wykonania. Dodaj te fasole do konfiguracji Spring. Inne użycie AspectJ Container do aplikacji bez sprężyn

4

Java 1.7 * jest dostarczana w pakiecie z technologią Java Mission Control (jmc), która ma funkcję "Flight Recorder", za pomocą której można profilować wykonanie metody. Wyniki profilowania są wyświetlane niemal identycznie jak w AppDynamics - łatwo zauważyć problemy z perfekcją (szczególnie, które metody pochłaniają cały procesor).

Choć nie wyszczególniono, ale dobre blogu wyjaśnianie o rejestratorze lotu: http://hirt.se/blog/?p=364

* Nie wiesz, o mniejszej wersji

+1

JMC istnieje od 7u40 – Klara

+0

Próbowałem używać JMC. Wygląda całkiem profesjonalnie, ale w końcu nie rezygnuje z tego, czego potrzebujesz - jak długo coś zajmuje, aby wykonać, lub co trwa najdłużej. JMC powie Ci, co jest nazywane najczęściej ... a może to, co zajmuje większość czasu ... ale w porównaniu do jvisualvm, wyniki są różne, a wyniki jvisualvm wyglądają bardziej wiarygodnie. – cs94njw

Powiązane problemy