En guide til Java-profiler

1. Oversigt

Nogle gange er det ikke nok at skrive kode, der bare kører. Vi vil måske vide, hvad der foregår internt, såsom hvordan hukommelse allokeres, konsekvenser af at bruge en kodningstilgang frem for en anden, implikationer af samtidige henrettelser, områder til forbedring af ydeevne osv. Vi kan bruge profiler til dette.

En Java Profiler er et værktøj, der overvåger Java bytecode-konstruktioner og operationer på JVM-niveau. Disse kodekonstruktioner og -operationer inkluderer oprettelse af objekter, iterative udførelser (inklusive rekursive opkald), metodeudførelser, trådudførelser og affaldssamlinger.

I denne artikel vil vi diskutere de vigtigste Java-profiler: JProfiler, YourKit, Java VisualVM og Netbeans Profiler.

2. JProfiler

JProfiler er et topvalg for mange udviklere. Med en intuitiv brugergrænseflade leverer JProfiler grænseflader til visning af systemets ydeevne, hukommelsesforbrug, potentielle hukommelseslækager og trådprofilering.

Med disse oplysninger kan vi let vide, hvad vi har brug for for at optimere, eliminere eller ændre - i det underliggende system.

Her ser JProfilers interface ud:

JProfiler oversigtsgrænseflade med funktioner

Som de fleste profiler kan vi bruge dette værktøj til både lokale og eksterne applikationer. Det betyder, at det er muligt at profil Java-applikationer, der kører på eksterne maskiner uden at skulle installere noget på dem.

JProfiler leverer også avanceret profilering til både SQL- og NoSQL-databaser. Det giver specifik support til profilering af JDBC, JPA / Hibernate, MongoDB, Casandra og HBase databaser.

Nedenstående skærmbillede viser JDBC sonderingsgrænsefladen med en liste over aktuelle forbindelser:

JProfiler database sonderingsvisning

Hvis vi er ivrige efter at lære om kalde træ for interaktioner med vores database og se forbindelser, der kan lækkes, JProfiler håndterer pænt dette.

Live-hukommelse er en funktion i JProfiler, der giver os mulighed for det se den aktuelle hukommelsesforbrug af vores applikation. Vi kan se hukommelsesforbrug for objektdeklarationer og forekomster eller for det fulde opkaldstræ.

I tilfælde af allokeringskaldetræet kan vi vælge at se opkaldstræet for levende objekter, affaldssamlede objekter eller begge dele. Vi kan også beslutte, om dette tildelingstræ skal være for en bestemt klasse eller pakke eller alle klasser.

Skærmbilledet nedenfor viser live-hukommelsesforbruget af alle objekter med antallet af forekomster:

JProfiler live hukommelsesvisning

JProfiler understøtter integration med populære IDE'er såsom Eclipse, NetBeans og IntelliJ. Det er endda muligt at navigere fra øjebliksbillede til kildekode!

3. YourKit

YourKit Java Profiler kører på mange forskellige platforme og leverer separate installationer til hvert understøttet operativsystem (Windows, MacOS, Linux, Solaris, FreeBSD osv.).

Ligesom JProfiler har YourKit kernefunktioner til visualisering af tråde, affaldssamling, hukommelsesforbrug og hukommelseslækage med support til lokal og ekstern profilering via ssh tunneling.

Her er et hurtigt kig på hukommelsesprofileringsresultaterne for en Tomcat-serverapplikation:

YourKit Java Profiler-hukommelsesprofilering af Tomcat-serverapplikationen

YourKit er også praktisk, når vi ønsker det undtagelser med profil kastet. Vi kan let finde ud af, hvilke typer undtagelser der blev kastet, og hvor mange gange hver undtagelse opstod.

YourKit har en interessant CPU-profilering, der muliggør fokuseret profilering på bestemte områder af vores kode såsom metoder eller undertræer i tråde. Dette er meget kraftfuldt, da det giver mulighed for betinget profilering gennem sin hvad-hvis-funktion.

Figur 5 viser et eksempel på tråd-profileringsgrænsefladen:

Figur 5. YourKit Java Profiler trådgrænseflade til profilering

Det kan vi også profil SQL og NoSQL databaseopkald med YourKit. Det giver endda en visning af faktiske forespørgsler, der blev udført.

Selvom dette ikke er en teknisk overvejelse, gør den tilladelige licensmodel af YourKit det til et godt valg for multibrugere eller distribuerede teams såvel som køb af enkeltlicenser.

4. Java VisualVM

Java VisualVM er et forenklet, men alligevel robust profilværktøj til Java-applikationer. Dette værktøj er som standard leveres med Java Development Kit (JDK). Driften er afhængig af andre enkeltstående værktøjer, der findes i JDK, såsom JConsole, jstat, jstack, jinfoog jmap.

Nedenfor kan vi se en simpel oversigtsgrænseflade for en igangværende profileringssession ved hjælp af Java VisualVM:

Java VisualVM lokal tomcat server app profilering

En interessant fordel ved Java VisualVM er, at vi kan udvide det til at udvikle nye funktioner som plugins. Vi kan derefter tilføje disse plugins til Java VisualVMs indbyggede opdateringscenter.

Java VisualVM understøtter lokal og ekstern profileringsamt hukommelse og CPU-profilering. For at oprette forbindelse til fjernapplikationer kræves der legitimationsoplysninger (værtsnavn / IP og adgangskode efter behov) men understøtter ikke ssh-tunneling. Vi kan også vælge enten at aktivere realtidsprofilering med øjeblikkelige opdateringer (typisk hvert 2. sekund).

Nedenfor kan vi se hukommelsesudsigterne for en Java-applikation, der er profileret ved hjælp af Java VisualVM:

Java VisualVM hukommelse bunke histogram

Med snapshot-funktionen i Java VisualVM kan vi tage snapshots af profilsessioner til senere analyse.

5. NetBeans Profiler

NetBeans Profiler er bundtet med Oracle's open source NetBeans IDE.

Mens denne profil deler mange ligheder med Java VisualVM, det er et godt valg, når vi vil have alt pakket ind i et program (IDE + Profiler).

Alle andre profiler, der er diskuteret ovenfor, indeholder plugins til forbedring af IDE-integrationen.

Nedenstående skærmbillede viser et eksempel på NetBeans Profiler-grænsefladen:

Netbeans Profiler telemetri interface

Netbeans Profiler er også en godt valg til let udvikling og profilering. NetBeans Profiler giver et enkelt vindue til konfiguration og kontrol af profilsessionen og visning af resultaterne. Det giver et unikt træk ved at kende hvor ofte affaldsindsamling sker.

6. Andre solide profiler

Nogle hæderlige omtaler her er Java Mission Control, New Relic og Prefix (fra Stackify) - disse har mindre markedsandel generelt, men fortjener bestemt en omtale. For eksempel er Stackifys præfiks et fremragende letvægtsprofileringsværktøj, der er velegnet til profilering ikke kun Java-applikationer, men også andre webapplikationer.

7. Konklusion

I denne opskrivning diskuterede vi profilering og Java-profiler. Vi kiggede på funktionerne i hver Profiler, og hvad der informerer det potentielle valg mellem hinanden.

Der er mange Java-profiler tilgængelige, hvor nogle har unikke egenskaber. Valget af hvilken Java-profil, der skal bruges, som vi har set i denne artikel, afhænger for det meste af en udviklers valg af værktøjer, det krævede analyseniveau og profilens funktioner.


$config[zx-auto] not found$config[zx-overlay] not found