Visual VM, JMX i inni
Transkrypt
Visual VM, JMX i inni
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 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 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 [email protected]