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ů

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

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

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

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

Procesy a vlákna (Processes and Threads)

Matematika v programovacích

Vizuální programovací jazyk

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

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

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

Management procesu I Mgr. Josef Horálek

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

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

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

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

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

Zátěžové testy aplikací

Java/QE Akademie - Osnova

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

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

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

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

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

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

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

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

Struktura programu v době běhu

Monitoring SQL Server, Resource Governor, Tracing SQL Server

Profesionální služby kolem Linuxu

Pohled do nitra mikroprocesoru Josef Horálek

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

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

Implementace dávkových operací

10. Složitost a výkon

PROGRAMOVÁNÍ PRO MS WINDOWS 2

Specifikace. Odevzdání do

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

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

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

Princip funkce počítače

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í.

Pokročilé architektury počítačů

Systém řízení sběrnice

3. Základy programovacího jazyka Java

Analýza výkonu HELIOS Green

Technické vývojové prostředky

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

Von Neumannovo schéma

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

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

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

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

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

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.

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)

Přijímací zkouška - informatika

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

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

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

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

vlastnosti Výsledkem sledování je: a) Využití aplikací b) Používání internetu c) Vytížení počítačů d) Operační systém e) Sledování tisků

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

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

Paralelní architektury se sdílenou pamětí typu NUMA. NUMA architektury

1 Webový server, instalace PHP a MySQL 13

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

Časová a prostorová složitost algoritmů

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

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

1. Webový server, instalace PHP a MySQL 13

Jak efektivně ochránit Informix?

Virtualizace. Lukáš Krahulec, KRA556

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

Systém adresace paměti

1. Programování proti rozhraní

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

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

Vrstvy programového vybavení Klasifikace Systémové prostředky, ostatní SW Pořizování Využití

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

Vláknové programování část I

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

11. Logické analyzátory. 12. Metodika měření s logickým analyzátorem

C2184 Úvod do programování v Pythonu podzim Mgr. Stanislav Geidl Národní centrum pro výzkum biomolekul Masarykova univerzita.

java remote method invocation Kateřina Fricková, Matouš Jandek

INSTALACE PRODUKTU ONTOPIA KNOWLEDGE SUITE

Paralelní programování

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

Č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

Digitální luxmetr Sonel LXP-1. Návod k obsluze

Vizuální programování

1 Testování studentských programů systémem Progtest

Téma 8: Konfigurace počítačů se systémem Windows 7 IV

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 2

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 Nutná izolace pokusů za jakých podmínek? Omezit další běžící aplikace Pozor na bezpečnostní aplikace Nutné vhodně interpretovat výsledky 3

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í 4

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ů 5

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

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 7

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 Pomáhá mít tabulku symbolů debugger 8

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) 9

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 10

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! 11

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 12

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 13

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í) 14

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) 15

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 16

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 17

Profilování v Javě Interpretovaný jazyk 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ů 18

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 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 19

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é 20

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í 21

Vlastní profilování - čas Měření času v daném okamžiku 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 Nemusí jít o skutečný čas, bez synchronizace mezi vlákny nebo instancemi JVM! Trvá dlouho tvorba timerů 22

Vlastní profilování - čas Pozor na overhead 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 nanotime() není bezpečný mezi vlákny 23

Vlastní profilování - čas Výsledky ukládat do mapy 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 24

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á 25

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() 26

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 27

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

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 29

Vzorkování paměti Jmap neprovádí garbage kolekci Lze získat jen živé objekty jmap histo:live PID 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 30

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

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! 32

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ů 33

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] 34

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 35

Profiler v JRE Parametr Xrunhprof 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 36

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> 37

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" 38

Přehled nástrojů Java misson control Od Javy 8 (ve starších jen JConsole) Podrobnější sledování běhu (jako JConsole) Flight recorder záznam běhu programu pro pozdější zpracování Paměť, CPU, stav vláken, profilování běhu 39

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

Přehled nástrojů VisualVM 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 41

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 42

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

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

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

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 46

Použití VisualVM - NetBeans Profil aplikace 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 47

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

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 49

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 50

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

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 52

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

Děkuji za pozornost OTÁZKY? 54