Sprievodca profilermi Java

1. Prehľad

Niekedy stačí iba spustiť bežiaci kód. Možno by sme chceli vedieť, čo sa deje vnútorne, napríklad to, ako je alokovaná pamäť, dôsledky používania jedného prístupu kódovania nad druhým, dôsledky súbežných vykonávaní, oblasti na zlepšenie výkonu atď. Na toto môžeme použiť profilovače.

Java Profiler je nástroj, ktorý sleduje konštrukcie a operácie Java bytecode a operácie na úrovni JVM. Tieto konštrukty a operácie kódu zahŕňajú vytváranie objektov, iteratívne vykonávania (vrátane rekurzívnych volaní), vykonávanie metód, vykonávanie vlákien a zbierky odpadu.

V tomto článku budeme diskutovať o hlavných Java Profileroch: JProfiler, YourKit, Java VisualVM a Netbeans Profiler.

2. JProfiler

JProfiler je najlepšou voľbou pre mnohých vývojárov. S intuitívnym užívateľským rozhraním poskytuje JProfiler rozhrania na sledovanie výkonu systému, využitie pamäte, potenciálne úniky pamäte a profilovanie vlákien.

Vďaka týmto informáciám môžeme ľahko zistiť, čo potrebujeme v základnom systéme optimalizovať, vylúčiť alebo zmeniť.

Takto vyzerá rozhranie JProfiler:

Prehľadové rozhranie JProfiler s funkciami

Rovnako ako väčšina profilovačov, aj tento nástroj môžeme používať pre lokálne aj vzdialené aplikácie. To znamená, že je to možné profilujte Java aplikácie bežiace na vzdialených počítačoch bez toho, aby ste na ne museli niečo inštalovať.

JProfiler tiež poskytuje pokročilé profilovanie pre databázy SQL aj NoSQL. Poskytuje špecifickú podporu pre profilovanie databáz JDBC, JPA / Hibernate, MongoDB, Casandra a HBase.

Nasledujúca snímka obrazovky zobrazuje rozhranie sondovania JDBC so zoznamom aktuálnych pripojení:

Pohľad na sondovanie databázy JProfiler

Ak sa chceme dozvedieť viac o hovorový strom interakcií s našou databázou a uvidíš spoje, ktoré môžu byť netesné, JProfiler to pekne zvláda.

Live Memory je jednou z funkcií JProfiler, ktorá nám umožňuje zobraziť aktuálne využitie pamäte našou aplikáciou. Môžeme zobraziť využitie pamäte pre deklarácie a inštancie objektov alebo pre celý strom hovorov.

V prípade stromu volajúceho na pridelenie si môžeme zvoliť zobrazenie stromu hovorov živých objektov, odpadkov zbieraných objektov alebo oboch. Môžeme sa tiež rozhodnúť, či by tento alokačný strom mal byť pre konkrétnu triedu alebo balík alebo pre všetky triedy.

Nasledujúca obrazovka zobrazuje využitie živej pamäte všetkými objektmi s počtom inštancií:

Zobrazenie živej pamäte JProfiler

Podporuje JProfiler integrácia s populárnymi IDE ako napríklad Eclipse, NetBeans a IntelliJ. Je to dokonca možné prejsť zo snímky na zdrojový kód!

3. YourKit

YourKit Java Profiler pracuje na mnohých rôznych platformách a poskytuje samostatnú inštaláciu pre každý podporovaný operačný systém (Windows, MacOS, Linux, Solaris, FreeBSD atď.).

Rovnako ako JProfiler, aj YourKit má základné funkcie pre vizualizáciu vlákien, zbieranie odpadu, využitie pamäte a úniky pamäte, s podpora lokálneho a vzdialeného profilovania pomocou ssh tunelovania.

Tu je rýchly pohľad na výsledky profilovania pamäte serverovej aplikácie Tomcat:

Profilovanie pamäte vášho servera Java Profiler serverovej aplikácie Tomcat

YourKit sa hodí aj v tých časoch, keď chceme výnimky vyvolané profilom. Ľahko zistíme, aké typy výnimiek boli vyhodené a koľkokrát sa každá výnimka vyskytla.

YourKit má zaujímavé Funkcia profilovania CPU, ktorá umožňuje sústredené profilovanie na určité oblasti nášho kódu napríklad metódy alebo podstromy v vláknach. Je to veľmi výkonné, pretože umožňuje podmienené profilovanie prostredníctvom funkcie typu „keby“.

Obrázok 5 zobrazuje príklad rozhrania profilovania vlákien:

Obrázok 5. Rozhranie profilovania vlákien YourKit Java Profiler

Môžeme tiež profil SQL a NoSQL volania do databázy s YourKit. Poskytuje dokonca pohľad na skutočné dotazy, ktoré sa vykonali.

Aj keď to nie je z technického hľadiska, vďaka tolerantnému modelu licencovania produktu YourKit je to dobrá voľba pre tímy viacerých používateľov alebo distribuovaných tímov, ako aj pre nákupy jednej licencie.

4. Java VisualVM

Java VisualVM je zjednodušený, ale robustný nástroj na profilovanie aplikácií Java. V predvolenom nastavení je tento nástroj dodávaný so súpravou Java Development Kit (JDK). Jeho prevádzka sa spolieha na ďalšie samostatné nástroje poskytované v JDK, ako napr JConsole, jstat, jstack, jinfoa jmap.

Ďalej vidíme jednoduché prehľadové rozhranie prebiehajúcej relácie profilovania pomocou Java VisualVM:

Profilovanie aplikácie lokálneho Tomcat servera Java VisualVM

Jednou zaujímavou výhodou Java VisualVM je, že môžeme rozšíriť ho tak, aby vyvíjal nové funkcie ako doplnky. Potom môžeme tieto doplnky pridať do vstavaného centra aktualizácií Java VisualVM.

Java VisualVM podporuje miestne a vzdialené profilovanie, ako aj profilovanie pamäte a CPU. Pripojenie k vzdialeným aplikáciám vyžaduje poskytnutie poverení (názov hostiteľa / IP a heslo podľa potreby) ale neposkytuje podporu pre tunelovanie ssh. Môžeme sa tiež rozhodnúť, či povolíme profilovanie v reálnom čase s okamžitými aktualizáciami (zvyčajne každé 2 sekundy).

Ďalej vidíme výhľad pamäte aplikácie Java profilovanej pomocou Java VisualVM:

Histogram haldy pamäte Java VisualVM

S funkciou momentky Java VisualVM môžeme robiť snímky profilovacích relácií pre neskoršiu analýzu.

5. Profiler NetBeans

NetBeans Profiler je dodávaný s otvoreným zdrojom Oracle NetBeans IDE.

Zatiaľ čo tento profilovač zdieľa veľa podobností s Java VisualVM, je to dobrá voľba, keď chceme mať všetko zabalené v jednom programe (IDE + Profiler).

Všetky ostatné profilovače diskutované vyššie poskytujú doplnky na vylepšenie integrácie IDE.

Nasledujúca snímka obrazovky zobrazuje príklad rozhrania NetBeans Profiler:

Telemetrické rozhranie Netbeans Profiler

Netbeans Profiler je tiež dobrá voľba pre ľahký vývoj a profilovanie. NetBeans Profiler poskytuje jediné okno na konfiguráciu a riadenie relácie profilovania a na zobrazovanie výsledkov. Dáva jedinečnú vlastnosť poznania ako často dochádza k odvozu odpadu.

6. Ostatné pevné profilovače

Niektoré čestné uznania sú tu: Java Mission Control, New Relic a Prefix (od Stackify) - majú celkovo menší trhový podiel, ale určite si zaslúžia zmienku. Napríklad Prefix od spoločnosti Stackify je vynikajúci ľahký profilovací nástroj vhodný na profilovanie nielen aplikácií Java, ale aj iných webových aplikácií.

7. Záver

V tomto dokumente sme diskutovali o profilovaní a profiloch Java. Pozreli sme sa na vlastnosti každého Profileru a na to, čo informuje o možnom výbere jedného nad druhým.

Existuje veľa profilovačov Java, z ktorých niektoré majú jedinečné vlastnosti. Výber, ktorý použije profiler Java, ako sme videli v tomto článku, väčšinou závisí od výberu nástrojov vývojára, požadovanej úrovne analýzy a funkcií profilovača.