slajdy - JUG Poznań
Transkrypt
slajdy - JUG Poznań
Visual VM i VisualVM API Adam Dudczak adudczak (at) gmail.com Poznań NetBeans Day 2 grudnia 2008 Plan prezentacji 1 Wprowadzenie do VisualVM 2 VisualVM API - wtyczki 3 Podsumowanie i dodatkowe informacje Czym jest VisualVM? Aplikacja stworzona w oparciu o NetBeans Platform Począwszy od Java update 1.6 07, dostarczane razem z Sun JDK VisualVM to projekt otwarty, którego kod dostępny jest na licencji GPLv2 Aplikacja w ramach której zintegrowano istniejące narzędzia JDK jinfo, jmap, jstack, jstat, jhat, jps JConsole NetBeans profiler Narzędzia diagnostyczne dostępne w JDK jps – lista procesów JVM, analog unix’owego polecenia ps jinfo – podstawowe informacje o działającym procesach JVM jstat – statystyki dotyczące działania GC, ładowania klas i kompilacji jstack – zrzut stanu wątków (nawet gdy JVM wisi) jmap – zrzut zawartości sterty, zapis w formacie hprof jhat – przeglądania zawartości zrzutu sterty jconsole – zużycie pamięci, klient JMX i inne Przykład 1 : Wykorzystanie narzędzi dostępnych w JDK >jps 1234 jps 4296 Main --branding nb >jstack 4296 >thread-dump.txt >jmap -dump:format=b,file=heap.hprof 4296 >jhat -J-mx512m heap.hprof Reading from heap.bin... Dump file created Mon Oct 20 20:31:40 CEST 2008 Snapshot read, resolving... ... Started HTTP server on port 7000 Server is ready. > przegladarka http://localhost:7000 Funkcje dostępne w VisualVM (1) VisualVM integruje to co już jest dostępne: Uzyskać podstawowe informacje o procesach Javy działających lokalnie i zdalnie Monitorować przebieg wykonania wątków danej aplikacji Możliwość wykonania i zapisania zrzutu aktualnego stanu wątków (ang. Thread dump) Zrzut zawartości sterty (ang. Heap dump) Funkcje dostępne w VisualVM (2) Możliwość porównania zużycia pamięci i stanu wątków w różnych stadiach wykonania programu Profiler – umożliwiający badanie utyliacji czasu procesora i pamięci W pełni funkcjonalny klient JMX Pełna zgodność z API pluginów do JConsole (por. JTop) Wizualizacja działania Garbage Collectora (Visual GC) i inne Co ze starszymi wersjami Javy? Tabele dostępnych funkcji Aplikacje lokalne jvmstat jmx attach Dostęp zdalny 1.42 5.0 6.0 7.0 X X X1 X X X X X X jvmstat 2 jmx 3 attach 1.42 5.0 6.0 7.0 X X X X X X X 1 Wymaga ustawienia -Dcom.sun.management.jmxremote 2 Na zdalnej maszynie musi działać jstatd 3 Wymaga ustawienia -Dcom.sun.management.jmxremote.port=numer JStat vs JMX vs Attach funkcja wykrycie działającej aplikacji monitoring podgląd wątków profiler zrzut wątków zrzut sterty wywołanie GC OOME Własności systemowe Argumenty JVM Main class jvmstat jmx X X X X X X X X X X X X X attach X X X X X Przykład 2 : możliwości VisualVM Funkcje znane z JConsole: podstawowe informacje, monitorowanie działania Thread Dump Analyzer Heap Dump Analyzer (wczytanie heap.hprof z przykładu 1) Czy możliwe jest wykonanie zdalnego zrzutu sterty? NetBeans Profiler Czy możliwy jest profilowanie aplikacji działącej na innej maszynie? Generowanie hierarchii wywołań Dwa słowa o uruchamianiu jstatd jstatd jest częścią JDK 1.6 Przy próbie uruchomienia jstatd może pojawić się błąd : Could not create remote object access denied Problem z polityką wykorzystania tools.jar, co trzeba zrobić: stworzyć plik tools.policy grant codebase "file:${java.home}/../lib/tools.jar" { permission java.security.AllPermission; }; uruchomić jstatd: jstatd J-Djava.security.policy=tools.policy trzeba również pamiętać aby uruchomić ten proces z poziomu tego samego użytkownika co monitorowana aplikacja Uruchomienie profilera Dla poprawnego działania profilera w przypadku JDK ¡ 1.6 06 należy uruchomić aplikacje z parametrem: -Xshare:off. Przy pierwszym uruchomieniu profiler przeprowadzi kalibracje wszystkie rzeczy optymalizujące szybkość procesora (np. SpeedStep) powinny byc wyłączone. Profiler używa metody (interfejs JVMTI) redefineClass(Class[] classes, byte[][] newBC) Profilowanie aplikacji działających w śrdowisku produkcyjnym Czy można profilować zdalne aplikacje? Profiler w wersji oryginalnej (z NetBeans IDE) umożliwia przeprowadzenie takiej operacji Na zdalnej maszynie trzeba zainstalować : Profiler Remote Pack Spadek wydajności po uruchomieniu profilera od 60% do 40% Mimo wykorzystania mechanizmu ograniczania liczby modyfikowanych metod poprawa wydajności jest niewielka Rozszerzenie VisualVM Najważniejsze punkty rozszerzeń to: ApplicationType (1) SingleDataSourceAction (2) DataSource i DataSourceDescription (3) Rozszerzenie VisualVM DataSourceView i PluggableDataSourceViewProvider (4) DataSourceViewPlugin (5) Przykład 3 : Tworzymy pierwsze rozszerzenie Szablony i kreatory ułatwiające tworzenie rozszerzeń można pobrać z http://plugins.netbeans.org/. Tworzenie DataSourceView Nasz własny ApplicationType Java IDE Wars VisualVm plugin :) Java IDE Wars VisualVm plugin Java IDE Wars VisualVm plugin został stworzony na bazie hitu „Shootout” autorstwa Dawida Weissa. http://www.cs.put.poznan.pl/dweiss/xml/projects/shootout/index.xml Podsumowanie - braki Wydaje sie że jest techniczna mozliwość aby zintegrować opcje robienia zdalnych zrzutów pamięci w głównym menu (jmx: com.sun.managment.HotSpotDiagnostic.dumpHeap()) Brak możliwości wydawania zaawansowanych zapytań jak w jhat (np. select s from j.l.String s where s.count = 1024) Czy można poprawić wydajność profilera? (czas próbkowania) Wsparcie dla Profiler Remote Pack Podsumowanie - zalety Wszystko w jednym miejscu Przyjemne, dobrze zrobione GUI Sporo nowych wtyczek, łatwa aktualizacja Dobrze udokumentowany proces tworzenia wtyczek Na pewno warto o tym narzędziu pamiętać Czytanki Strona projektu VisualVM – https://visualvm.dev.java.net „Using VisualVM to find and resolve performance issue in Liferay” – http://kanonbra.com/index.php/projects/ performance-testing/18-using-visualvm-on-liferay „Profiling With VisualVM, Part 2” – http://blogs.sun.com/ nbprofiler/entry/profiling_with_visualvm_part_2 „JDK Tools and Utilities” – http://java.sun.com/javase/ 6/docs/technotes/tools/index.html Czytanki (2) „Getting Started Extending VisualVM (Part 1)” – http://blogs.sun.com/geertjan/entry/getting_started_ extending_visualvm i wszystkie następne częsci... Dziękuje za uwagę Pytania ? Adam Dudczak adudczak (at) gmail.com