Profiling v Javě. Základy testování výkonnosti aplikací a hledání problematických míst. Richard Lipka

Podobné dokumenty
Profiling v Javě. Základy testování výkonnosti aplikací a hledání problematických míst. Richard Lipka

Správa paměti na platformě Java. Ladislav Thon

Uklízení odpadků a analýza úniku

11. Přehled prog. jazyků

Úvod Seznámení s předmětem Co je.net Vlastnosti.NET Konec. Programování v C# Úvodní slovo 1 / 25

Předměty. Algoritmizace a programování Seminář z programování. Verze pro akademický rok 2012/2013. Verze pro akademický rok 2012/2013

Procesy a vlákna (Processes and Threads)

Vizuální programovací jazyk

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Java/QE Akademie - Osnova

Management procesu I Mgr. Josef Horálek

09. Memory management. ZOS 2006, L.Pešička

Matematika v programovacích

Správa paměti. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016

2 Postup při programování, úvod do programovacího jazyka Java

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Operační systémy. Jednoduché stránkování. Virtuální paměť. Příklad: jednoduché stránkování. Virtuální paměť se stránkování. Memory Management Unit

Real Time programování v LabView. Ing. Martin Bušek, Ph.D.

Úvod. Únor Fakulta informačních technologií VUT. Radek Kočí Seminář Java Úvod 1/ 23

Architektura rodiny operačních systémů Windows NT Mgr. Josef Horálek

Implementace dávkových operací

Obsah. Kapitola 1 Hardware, procesory a vlákna Prohlídka útrob počítače...20 Motivace pro vícejádrové procesory...21

PROGRAMOVÁNÍ PRO MS WINDOWS 2

2) Nový druh připojení Ethernet-CA5 umožňující připojit nové zařízení CA5 a to přes Ethernet nebo přes GPRS

Monitoring SQL Server, Resource Governor, Tracing SQL Server

Specifikace. Odevzdání do

Profesionální služby kolem Linuxu

Analýza výkonu HELIOS Green

ČÁST 1. Základy 32bitového programování ve Windows

Google Web Toolkit. Martin Šurkovský, SUR března Katedra informatiky

Vzdělávací oblast: Informatika a informační a komunikační technologie Vzdělávací obor: Programování. Předmět: Programování

Vlákno (anglicky: thread) v informatice označuje vlákno výpočtu neboli samostatný výpočetní tok, tedy posloupnost po sobě jdoucích operací.

ZAŘÍZENÍ PRO VZDÁLENÝ SBĚR A PŘENOS DAT FIRMWARE

1 Webový server, instalace PHP a MySQL 13

O Apache Derby detailněji. Hynek Mlnařík

Vývoj SW pro mobilní zařízení s ios. Petr Hruška, Skymia s.r.o. Teorie a praxe IP telefonie,

Vzdělávací oblast: Informatika a informační a komunikační technologie Vzdělávací obor: Programování Předmět: Programování

Instalace a konfigurace web serveru. WA1 Martin Klíma

Přednáška. Správa paměti II. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

IUJCE 07/08 Přednáška č. 6

1. Webový server, instalace PHP a MySQL 13

Zátěžové testy aplikací

Čipové karty úvod, Ing. Jiří Buček. Katedra počítačových systémů Fakulta informačních technologií České vysoké učení technické v Praze

Knot DNS Resolver. Modulární rekurzivní resolver. Karel Slaný

Struktura programu v době běhu

Paralení programování pro vícejádrové stroje s použitím OpenMP. B4B36PDV Paralelní a distribuované výpočty

Principy operačních systémů. Lekce 5: Multiprogramming a multitasking, vlákna

Pohled do nitra mikroprocesoru Josef Horálek

Sítě SFN Systém pro analýzu a vizualizaci pokrytí a rušení vysílacích sítí

Operační systémy. Přednáška 8: Správa paměti II

Masarykova střední škola zemědělská a Vyšší odborná škola, Opava, příspěvková organizace

Testování SOA systémů v Oracle SOA Suite

Přijímací zkouška - informatika

3. Základy programovacího jazyka Java

Z. Kotala, P. Toman: Java ( Obsah )

Platforma.NET 11.NET Framework 11 Visual Basic.NET Základní principy a syntaxe 13

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE PŘEKLADY TYPICKÝCH JAZYKOVÝCH KONSTRUKCÍ PROGRAMOVACÍCH JAZYKŮ.

Optimalizace. Optimalizace. Profilování. Gprof. Gcov. Oprofile. Callgrind. Intel Vtune. AMD CodeAnalyst

Architektura a koncepce OS OS a HW (archos_hw) Architektura a koncepce OS Jádro OS (archos_kernel) Architektura a koncepce OS Typy OS (archos_typy)

9. Ladění a testování programů. booleovský výraz

Připravil: Ing. Vít Ondroušek, Ph.D. Technologie.Net Framework

Instalace. Produkt je odzkoušen pro MS SQL server 2008 a Windows XP a Windows 7. Pro jiné verze SQL server a Windows nebyl testován.

Vizuální programování

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)

Zajištění kvality programového vybavení - testování

OPS Paralelní systémy, seznam pojmů, klasifikace

MS WINDOWS II. Jádro. Správa objektů. Správa procesů. Zabezpečení. Správa paměti

TÉMATICKÝ OKRUH Softwarové inženýrství

10. Složitost a výkon

1. SYSTÉMOVÉ POŽADAVKY / DOPORUČENÁ KONFIGURACE HW A SW Databázový server Webový server Stanice pro servisní modul...

Databázový systém Matylda

JVM TOOL INTERFACE FAKULTA INFORMAČNÍCH TECHNOLOGIÍ BRNO UNIVERSITY OF TECHNOLOGY FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF INTELLIGENT SYSTEMS

Jalapeño: pekelně ostrá Java persistence v Caché. Daniel Kutáč Senior Sales Engineer

Správa paměti. doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 /

Systém řízení sběrnice

Princip funkce počítače

MBI - technologická realizace modelu

Pokročilé architektury počítačů

Obsah: Bezpečnost Vybavení Vlastnosti Popis a funkce Pracovní postupy Nastavení Záznam teploty...

Statická analýza kódu - za kód bez chyb

Load Balancer. RNDr. Václav Petříček. Lukáš Hlůže Václav Nidrle Přemysl Volf Stanislav Živný

Automatické testování GUI

Virtualizace. Lukáš Krahulec, KRA556

Technické vývojové prostředky

Java [džava] nebo [džáva] v americkém slangu "kafe" Sun Microsystems nyní Oracle

Obsah. 1) Rozšířené zadání 2) Teorie zásuvných modulů a) Druhy aplikací používajících zásuvné moduly b) Knihovny c) Architektura aplikace d) Výhody

Von Neumannovo schéma

1. Programování proti rozhraní

Paralelní programování

Programování ve Windows Dynamické knihovny. Andrea Číková Martin Osovský

Systém adresace paměti

Windows a real-time. Windows Embedded

Úvod. Leden Fakulta informačních technologií VUT. Radek Kočí Seminář Java Úvod 1/ 22

1. Úvod do Ajaxu 11. Jak Ajax funguje? 13

FRED & PostgreSQL. CZ.NIC, z.s.p.o. Jaromír Talíř <jaromir.talir@nic.cz>

Optimalizaci aplikací. Ing. Martin Pavlica

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Transkript:

Profiling v Javě Základy testování výkonnosti aplikací a hledání problematických míst Richard Lipka

Cíle Optimalizace programu a detekce problémů Analýza běhu programu Doba běhu jednotlivých metod Četnost volání metod Profilování Analýza spotřeby paměti Hledání memory leaků Hledání velkých objektů Optimalizace

Profiling a Benchmarkování Není to totéž Benchmarking porovnání variant, blackbox užitečné pro HW, cizí SW Hodnotí stávající výkon a jeho závislost na zátěži Profiling analýza proč se program nějak chová, whitebox užitečné pro vlastní SW Hledá co spotřebovává zdroje Stále je potřeba mít nějakou (opakovatelnou) zátěž programu opakování problémového běhu Nutná izolace pokusů za jakých podmínek? Omezit další běžící aplikace Pozor na bezpečnostní aplikace Nutné vhodně interpretovat výsledky

Pozice profilingu Ve vývojářském prostředí Během vývoje, často přímo prostředky IDE Stack který má vliv na výkon nemusí odpovídat realitě plná kontrola nad činností lze zkoušet cokoliv Po nasazení Sledování nasazené a běžící aplikace je třeba postupovat opatrně (nenarušit běh aplikace pro klienty) Realističtější provoz, ale obtížnější na zvládnutí (obtížné zajištění opakování podmínek testu) Sbírání chybových dat, optimalizace Windows, Eclipse, (žádosti při instalaci)

Instrumentace vs vzorkování Vliv na program Instrumentace Přesnost získaných dat Něco za něco Ne vždy použitelné v reálném provozu Podpora specializovaných nástrojů Vzorkování

Instrumentace vs vzorkování Instrumentace Před spuštěním programu Binární soubory (= nepotřebuji zdrojové texty) Zdrojové texty (podobné jako aserce) Vzorkování Za běhu programu Memory dump, stack trace, instrukce v CPU Využití možností jazyka a systému Přerušení, sledování událostí, speciální API Snazší u interpretovaných jazyků

Možnosti profilingu Profiling CPU Paměť Čas Volání Vzorkování Využití Alokace

Základní výstupy Profil Statický výstup se souhrnem informací o běhu aplikace Hlavně pro jednovláknové programy Délka ~ délce zdrojového textu Trasování Posloupnost sledovaných událostí (vidím pořadí akcí) Důležitá pro vícevláknové aplikace posloupnost událostí v každém vláknu Pro delší běh programu nepraktické (příliš dlouhé) Délka ~ počtu provedených instrukcí Obtížná analýza Podobné jako výstup z velmi podrobného logu

Základní výstupy Paměťové statistiky Alokovaná paměť, běh GC Struktury paměť využívají a jejich četnost Sestavení grafu heapu lze procházet Data sbírána za běhu programu Memory dump (core dump, heap dump) Aktuální stav adresního prostoru programu v daném okamžiku Náročná analýza pokud není strojová, skoro nemožná (pro Javu) Pomáhá mít tabulku symbolů (pro C) debugger

Druhy profilování - instrumentace Program je modifikován ovlivňuje výkon programu může skrýt / způsobit některé bugy (naruší časování vláken, souběhy v úzkých místech) Typy instrumentace Manuální (programátor si ji tvoří sám log ) Zdrojové texty (automaticky doplněná na sledované body, aspektové programování...) Překladačem doplněná (např. v gcc)

Druhy profilování - binární instrumentace Vložení nových instrukcí do spustitelného souboru / mezijazyka (bytecode) Před spuštěním překladačem / profilerem Za běhu, před provedením instrukcí Využití Řízený běh S programem běží celý profiler Doplněné instrukce jako sondy Injekce Jen doplnění speciálních volání Méně náročné na výkon

Druhy profilování statistické profilery Využití možností HW nebo virtuálního stroje Přerušení s vysokou prioritou Přístup do cizí paměti Profiler vzorkuje Obsah PC a dalších registrů Stav paměti Neinvazivní dobré výsledky Jen aproximace dat!

Druhy profilování - události Pro interpretované jazyky Podpora interpretu pro sledování událostí ( hooky ) Co vše lze zachytit záleží na API Lze snadno tvořit vlastní profiler Funguje v Java JVM Tools Interface API.NET Profiling API Python modul hotshot Ruby modul profile.rb

Typické chyby Instrumentace ovlivní výsledek Hlavně u vícevláknových aplikací Sledovaný program proběhne příliš rychle nestihnu odebrat reprezentativní vzorky Profiling na nasazeném sw Použití nestabilních / zdržujících funkcí Porušení bezpečnosti

Profilování pro ladění Podobný problém jako benchmarkování Izolace běhu experimentu Stanovení cílů před začátkem Soustředění se na důležití věci Málo volaná metoda zabírá 10% času max. 10% zrychlení (zhoršuje se s nárůstem režie volání)

Postup ladění Spustit měření (profiler / benchmark) Najít úzká místa, identifikovat ta důležitá Odhadnout příčiny zpomalení Navrhnout protidůvody co kdyby byla úzká místa jinde Připravit izolovaný test k ověření Na základě protidůvodu Provést test a změřit výsledky Upravit aplikaci Otestovat jestli úprava pomohla (+ standardní testy jestli není zanesena chyba)

Postup ladění best practices Důsledně verzovat všechno zdrojový text a všechny změny testy informace o výsledcích testů nastavení pro testy (co je třeba volat, spustit ) Provádět unit testy s každou změnou Pozor na souběhové chyby

Uživatelé a výkon Uživatelé málokdy vnímají skutečný výkon Progresbar působí rychleji než žádné hlášení o stavu Nesmí lhát! Pak ho uživatelé ignorují Souběžná práce působí rychleji Dlouhé úlohy ve vláknech na pozadí Streamování a zpracování částečných dat působí rychleji Caching může aplikaci doopravdy zrychlit Garbage kolekce zasekne všechno

Interpretovaný jazyk Profilování v Javě Lze se napojit na interpret JVMTI Řada nástrojů součástí standardní Javy Heap dump, sledování aplikací Velké množství volných i placených nástrojů

Vlastní profilování Využití znalostí JVM a bytecode Nemusím se učit nic nového Prohlubuji si znalost toho co denně používám, učím se lépe porozumět VM a svému programu Profilování uvnitř aplikace Není problém s bezpečností Existují podrobné logy Nepotřebuji speciální nástroje nebo rozšíření JVM Nutné nějak odstranit z produkční verze zpomaluje běh

Vlastní profilování - možnosti Doplnění kódu do Java programů Dobře prostudovat standardní třídy a metody obvykle velmi stabilní Možnosti JVM -X a XX volby při spouštění programu Manipulace s bytecode Nastudovat specifikaci - potenciálně nebezpečné

Vlastní profilování - knihovny Ručně vytvořené sledování Třídy java.system, java.runtime Funkce pro Měření času Sledování paměti Práce s třídami a metodami Volání jiných aplikací

Měření času v daném okamžiku Vlastní profilování - čas currenttimemillis() Aktuální čas v milisekundách (timestamp) Granuralita závisí na četnosti časových přerušení (až 10 ms!) nanotime() Časová známka v nanosekundách, vlastní časovač měří skutečně dobu která uběhla Nemusí jít o skutečný čas, bez synchronizace mezi vlákny nebo instancemi JVM! Trvá dlouho tvorba timerů, náročnější volání

Pozor na overhead Vlastní profilování - čas Funkce měřící čas potřebují čas Zápisy do souborů potřebují čas Měří skutečný čas, ne čas CPU Pozor na souběh potřebuji synchronizované hodiny (vnější zdroj času) nanotime() není bezpečný mezi vlákny

Vlastní profilování - čas Výsledky ukládat do mapy / pole / souboru Alokace paměti v Javě rychlá (tvorba nových objektů pomalá raději primitivní datové typy) U vícevláknové aplikace pozor na souběh Poslouží i jako logger Dobrá data pro hledání runtime chyb Lze trasovat program Pokud je požadované vždy

Vlastní profilování - vzorkování Krátké, často volané metody Méně než milisekundu, tisíce a víc volání za sekundu Obvykle stačí jen čítače počtu použití metody Pro měření krátkého času nativní funkce V C, instrukce rdtsc čítač cyklů procesoru od posledního resetu (x86 architektury) Pro každé jádro jiný, nejsou synchronizované Nativní kód zabírá čas! Měří cykly, bez ohledu na to kdo je využívá

Vlastní profilování - vzorkování Získání thread dumpu v náhodnou dobu Pokud se nějaká metoda volá často, nejspíš budu v ní Možnosti (v Javě): Ukončení aplikace kill -3 nebo Ctrl-Break dostanu stacktrace V konzoli jstack <pid> (vhodné pro skriptování) V programu Thread.getStackTrace() nebo Thread.getAllStackTraces()

Vlastní profilování - paměť Před měřením garbage kolekce gc() - jen návrh na spuštění, nelze vynutit Metody pro měření freememory() volná paměť JVM totalmemory() celková paměť obsazená JVM maxmemory() maximální paměť kterou JVM může chtít použít

Měření Vlastní profilování - paměť Runtime r = Runtime.getRuntime(); gc(); long mem1 = r.freememory(); /*measured code*/ gc(); long mem2 = r.freememory();

Vzorkování paměti Jmap + JHat Konzolové aplikace Získání memory dumpu a jeho analýza K dispozici všude kde je JDK Použití jmap -dump:file=my_stack.bin 4365 jhat my_stack.bin jmap získá dump programu, jhat ho zobrazí Výsledky na http://localhost:7000

Jmap neprovádí garbage kolekci Lze získat jen živé objekty jmap histo:live PID Vzorkování paměti Dump jen v bezpečných bodech Není dokumentována možnost obejití Nejlépe při problémech -XX:+PrintClassHistogram Vypíše histogram po ukončení procesu -XX:+HeapDumpOnOutOfMemoryError Vypíše dump po výjimce

Alokace paměti Lze sledovat alokace Parametr JVM Xaprof Po ukončení vypíše seznam alokovaných objektů a jejich počty vím co v aplikaci vzniká, ale ne kdy a proč Zjištění kde a kdo paměť alokuje obtížnější Jediná možnost - instrumentace Využití aspektů Manipulace s bytecode

Změny bytecode Lze provádět za běhu funguje i po změnách zdrojových textů Lze sledovat konkrétní volání Knihovna ObjectWeb ASM Lze nastavit jakou instrukci hledat Lze nastavit co za ní / před ní vložit Využití hooků v classloaderu Balík java.lang.instrument Instrumentace bytecode Umí zasáhnout i do tříd Javy!

Sledování Garbage kolektoru Java umožňuje za běhu sledovat činnost garbage kolekce Parameter verbose:gc vypisuje činnost GC Další nastavení -XX:+PrintGCDetails chod GC -XX:+PrintGCTimeStamps doba spuštění GC -XX:+Print\ClassHistogramAfterFullGC (Before) výpis histogramů

Sledování Garbage kolektoru Základní výpis (jen -XX:+PrintGC) kolektor stav před a po kolekci doba [GC 279616K->143286K(1013632K), 0.5776077 secs] [GC 422902K->287195K(1013632K), 0.6870628 secs] MAP size: 3000000 [Full GC 379997K->337043K(1013632K), 0.8727914 secs] [GC 616659K->337044K(1013632K), 0.0583699 secs] MAP size: 1000000 [Full GC 409996K->159399K(1013632K), 0.5447442 secs]

Profiler v JRE - HotSpot Parametr Xprof Sumarizace běhu interpretovaných, přeložených a nativních metod Ploché vzorkování první metody z vrcholu zásobníku Poznám co je kompilované HotSpotem Interpreted + native Method 66.4% 0 + 101 java.io.fileinputstream.readbytes 0.7% 1 + 0 cz.zcu.kiv.lipka.vsp.memleaks.mediumobject.<init> Compiled + native Method 19.1% 29 + 0 java.util.random.nextint 11.8% 18 + 0 java.util.random.next

Parametr Xrunhprof Profiler v JRE Sleduje celý zásobník (podle nastavení hloubky - depth=5) Vzorkování (nastavitelný interval - cpu=samples,interval=10) nebo měření všech volání (pomalejší cpu=times) Sledování běhu vláken (thread=y) Výstup do souboru, pro další analýzu

Profiler v JRE TRACE 300053: (thread=200001) java.io.winntfilesystem.getlength(<unknown Source>:Unknown line) java.io.file.length(<unknown Source>:Unknown line) TRACE 300062: (thread=200001) cz.zcu.kiv.lipka.tools.randomstring.nextstring(randomstring.java:29) cz.zcu.kiv.lipka.vsp.memleaks.mediumobject.<init>(mediumobject.java:23) CPU SAMPLES BEGIN (total = 164) Mon Nov 25 17:03:31 2013 rank self accum count trace method 1 68.29% 68.29% 112 300064 java.io.fileinputstream.readbytes 2 14.63% 82.93% 24 300057 java.util.random.next 3 10.37% 93.29% 17 300058 java.util.random.nextint 4 2.44% 95.73% 4 300055 java.util.random.nextint 5 1.22% 96.95% 2 300054 cz.zcu.kiv.lipka.vsp.memleaks.mediumobject.<init>

Sledování JIT kompilace Pro získání detailů lze zapnout logování (jen pro analýzu, ne pro produkci velmi vysoký overhead) XX:+UnlockDiagnosticVMOptions XX:+LogCompilation vypisuje co a proč JIT dělá (XML, ukecané logy) XX:+TraceClassLoading (JITWatch) sleuduje činnost classloaderu XX:+PrintAssembly vypisuje výsledky kompilace Existuje JITWatch (na gitu) vizualizace zpracovávající výstup Umí zobrazit Javu, Bytecode a instrukce z JIT vedle sebe

Přehled nástrojů JConsole Součást Javy Sledování stavu aplikace za běhu Spuštění příkazem jconsole Sleduje Stav paměti Běžící vlákna I pro vzdálené aplikace (URL, PID) Vzdálené sledování je nutné povolit -Dcom.sun.management. jmxremote -Dcom.sun.management. jmxremote.port=9999 -Dcom.sun.management. jmxremote. authenticate=false -Dcom.sun.management. jmxremote.ssl=false"

Přehled nástrojů Java misson control Od Javy 8 (ve starších jen JConsole) Podrobnější sledování běhu (jako JConsole) Paměť, podrobné statistiky GC, vlákna, události v JVM, Flight recorder záznam běhu programu pro pozdější zpracování Paměť, CPU, stav vláken, profilování běhu Triggery pro reakce na události Může vyžadovat XX:+UnlockCommercialFeatures XX:+FlightRecorder

SAP Memory analyzer Přehled nástrojů Na platformě Eclipse, samostatný Analýza heap dumpu Snaží se najít možné memory leaky Hledá co drží objekty naživu Hledá memory leaky a deadlocky

VisualVM Přehled nástrojů Součást NetBeans, distribuován s JDK od Java7 Může fungovat i samostatně Umožňuje Analyzovat paměť spotřeba, heap dump Analyzovat běh vláken Sledovat běh programu

Přehled nástrojů - zdarma Nástroj Použití Metody Btrace Eureka JProfiler Sledování alokací paměti, stav vláken, doby odezvy Sledování stavu webové aplikace, spotřeby paměti, vyhozených výjimek Instrumentace bytecode Instrumentace bytecode + komunikace s API Jensor Tvorba vlastních sond Instrumentace bytecode JIP hprof Sledování dob odezvy, trasování programu Čas v CPU, stav vláken, stav heapu Aspektové změny zdrojových textů Součást JVM

Přehled nástrojů - placené Nástroj JProbe Jprofiler YourKit Cena 750 USD 400 USD 500 USD

Urychlení Javy Práce s primitivními datovými typy výrazně rychlejší než s objekty Tvorba nového objektu zabere víc času než nastavení existujícího, pozor na dočasné objekty v cyklech Vyhození výjimky a její zachycení náročné Nepoužívat pro řízení toku programu Zkontrolovat si v čem je která kolekce rychlá (např. https://dzone.com/articles/java-collectionperformance, nebo 4. okruh úloh) Čím méně synchronizací tím lépe pro vícevláknové aplikace co nejvíc immutable objektů (+ package Concurrent optimistické zámky a další užitečné věci) Frameworky (Hibernate, Dozer, GSON, ) žerou výkon hlavně reflexe

Jako součást NetBeans Existuje i plugin pro Eclipse Jako samostatná aplikace Použití VisualVM Připojuje se k běžícím aplikacím

3 spuštěcí dialogy Použití VisualVM - NetBeans Sledování aplikace (běh vláken) Profilování CPU Profilování paměti Dynamická i statická analýza Možnost vzorkování / instrumentace

Použití VisualVM - NetBeans Do zdrojových textů lze vložit profilovací body Nastavitelné vlastnosti, triggery Stopky měření času Získání snapshotu Stavu aplikace Heapu V kontextovém menu profiling

Profil aplikace Použití VisualVM - NetBeans Seznam všech volaných metod Strom volání Doba strávená v metodě V jejím vlastním kódu V dalších voláních lze najít co má cenu optimalizovat

Sledování vláken Použití VisualVM - NetBeans Podobné jako sledování programu Stav vlákna a jeho historie Jak dlouho vlákno spalo / čekalo

Použití VisualVM - NetBeans Procházení uloženého heapu Přehled všech tříd a jejich instancí Počty instancí, obsazená paměť Analýza referencí Všechny atributy objektu Reference ukazující na objekt

Použití VisualVM - NetBeans Hledání možných memory leaků Lze porovnat dva memory dumpy a zobrazit rozdíly Před získáním dumpu provést garbage kolekci

Možnost využít OQL jazyk Podobné jako SQL Použití VisualVM - NetBeans Hledání konkrétních instancí select a from java.util.linkedlist a where a.size > 10

Použití VisualVM - samostatné Lze spustit jako novou aplikaci Umožňuje monitorovat běžící aplikace Snadná instalace pluginů Přehled garbage collectoru Sondy pro vybrané metody knihoven Swing, I/O, Kolekce

Zahlcení informacemi Chybná interpretace výsledků Rizika Např. metoda čekající na vstup

Děkuji za pozornost OTÁZKY?