Visual VM, Java Management extension i inne ciekawostki Adam Dudczak adudczak (at) gmail.com Poznań Java User Group 6 października 2008
Plan prezentacji 1 Wprowadzenie do VisualVM 2 VisualVm jako klient JMX 3 Profilowanie aplikacji za pomocą VisualVM 4 Podsumowanie i dodatkowe informacje
Czym jest VisualVM? Aplikacja w ramach której zintegrowano istniejące narzędzia JDK jinfo, jmap, jstack, jstat JConsole znany z NetBeans profiler Wszystko to w oprawie stworzone w oparciu o NetBeans Platform (NetBeans RCP?) Począwszy od Java update 1.6 07, dostarczane razem z Sun JDK VisualVM to projekt otwarty (licencja GPLv2)
Funkcje dostępne w VisualVM (1) Uzyskanie podstawowych informacji o procesach Javy działających lokalnie i zdalnie Monitorowanie przebiegu wykonania wątków danej aplikacji (wykrywanie zakleszczeń) 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 W pełni funkcjonalny klient JMX Profiler umożliwiający badanie utyliacji czasu procesora i pamięci 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 1.42 5.0 6.0 7.0 jvmstat X X X X jmx X 1 X X attach X X Dostęp zdalny 1.42 5.0 6.0 7.0 jvmstat 2 X X X X jmx 3 X X X attach 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 jvmstat jmx attach wykrycie działającej aplikacji X X monitoring X X podgląd wątków X profiler X zrzut wątków X X zrzut sterty X X wywołanie GC X OOME X X Własności systemowe X X Argumenty JVM X X Main class X
Demo numer 1 O czym my w ogóle mówimy? Jak wygląda VisualVm?
Java Management extension (1) Java Management extension w specyfikacji Javy obecne od wersji 1.5 (Wcześniej niezależne implementacje np. mx4j) JMX pozwala stworzyć interfejs poprzez który można administrować, monitorować działanie aplikacji Komunikacja między klientem JMX a MBeanServer em może odbywać się np. poprzez połączenie lokalne, RMI, SSL Połączenie lokalne jest domyślnie uruchomione dla Javy 1.6 w przypadku 1.5 trzeba je uaktywnić (com.sun.management.jmxremote)
Java Management extension (2) Podstawową jednostką funkcyjną są MBeans, jest ich kilka rodzajów: Standard MBeans, Dynamic MBeans i in. Dostępny jest również mechanizm notyfikacji poprzez interfejs klienta usługi JMX jesteśmy informowani o zmianach wybranych przez nas parametrów Sporo zmian nadchodzi w JMX 2.0 (JDK 1.7)
Java Management extension (3) Każdy JVM udostępnia cztery podstawowe grupy MBeans: JImplementation informacje o implementacji MBeanServer a com.sun.management HotSpotDiagnostic umożliwia zapamiętanie stanu sterty, wgląd w konfigurację JVM java.lang informacje o ładowaniu klas, srodowisku w jakim działa JVM, zużyciu pamięci java.util.logging zarządzanie loggerami Większość serwerów aplikacyjnych oferuje rozbudowane interfejsy JMX (np. Tomcat, GlassFish, JBoss, WebSphere)
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 (plik w visual-vm-examples.zip:/etc/tools.policy) uruchomić jstatd: jstatd J-Djava.security.policy=tools.policy trzeba również pamiętać aby uruchomić ten proces działał z poziomu tego samego użytkownika co monitorowana aplikacja
Demo numer 2 Przykładowa implementacja MBeana Podłączanie się do działającego na serwerze kontenera Apache Tomcat Trochę JMX owej magii
Demo numer 3 Monitorowanie lokalnej aplikacji Porównywanie zużycia pamięci Zabawy z Thread Dump Analyzerem
Uruchomienie profilera Dla poprawnego działania profilera w przypadku JDK 1.6 06 należy uruchomić aplikacje z parametrem: -Xshare:off. W przeciwnym wypadku maszyna wirtualna może się nie przeżyć kontaktu z profilerem. Przy pierwszym uruchomieniu profiler przeprowadzi kalibracje wszystkie rzeczy optymalizujące szybkość procesora (np. SpeedStep) powinny byc wyłączone.
Demo numer 4 - Profiler Profilowanie zużycia czasu procesora i pamięci Możliwość zapamiętania wyników profilowania do późniejszego porównania Ograniczenie liczby modyfikowanych metod Ograniczenie częstotliwości próbkowanai alokacji obiektów
Profilowanie aplikacji działających w śrdowisku produkcyjnym Znaczny spadek wydajności po uruchomieniu profilera od 60% do 40% Mimo wykorzystania mechanizmu ograniczania liczby modyfikowanych metod poprawa wydajności jest niewielka
Podsumowanie Paru rzeczy jeszcze brakuje + kilka niedoróbek w interfejsie Cały czas powstają nowe wtyczki Myślę, że warto się przyjrzeć bliżej!
Czytanki (1) 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) Java theory and practice: Instrumenting applications with JMX https://visualvm.dev.java.net Monitoring and Management Using JMX http://java. sun.com/j2se/1.5.0/docs/guide/management/agent.html Creating a Custom JMX Client http://java.sun.com/ docs/books/tutorial/jmx/remote/custom.html
Dziękuje za uwagę Pytania? Adam Dudczak maneo@man.poznan.pl