En guide til Java-profiler

1. Oversikt

Noen ganger er det ikke nok å skrive kode som bare kjører. Det kan være lurt å vite hva som foregår internt, for eksempel hvordan minne tildeles, konsekvenser av å bruke en kodingstilnærming over en annen, implikasjoner av samtidige henrettelser, områder for å forbedre ytelsen, etc. Vi kan bruke profiler for dette.

En Java Profiler er et verktøy som overvåker Java bytecode-konstruksjoner og operasjoner på JVM-nivå. Disse kodekonstruksjonene og operasjonene inkluderer oppretting av objekter, iterative henrettelser (inkludert rekursive samtaler), metodeutførelser, trådutførelser og søppelsamling.

I denne artikkelen vil vi diskutere de viktigste Java-profilerne: JProfiler, YourKit, Java VisualVM og Netbeans Profiler.

2. JProfiler

JProfiler er et toppvalg for mange utviklere. Med et intuitivt brukergrensesnitt gir JProfiler grensesnitt for visning av systemytelse, minnebruk, potensielle minnelekkasjer og trådprofilering.

Med denne informasjonen kan vi enkelt vite hva vi trenger for å optimalisere, eliminere eller endre - i det underliggende systemet.

Slik ser JProfilers grensesnitt ut:

JProfiler oversiktsgrensesnitt med funksjoner

Som de fleste profilere, kan vi bruke dette verktøyet for både lokale og eksterne applikasjoner. Dette betyr at det er mulig å profilere Java-applikasjoner som kjører på eksterne maskiner uten å måtte installere noe på dem.

JProfiler gir også avansert profilering for både SQL- og NoSQL-databaser. Den gir spesifikk støtte for profilering av JDBC-, JPA / Hibernate-, MongoDB-, Casandra- og HBase-databaser.

Skjermbildet nedenfor viser JDBC sonderingsgrensesnitt med en liste over nåværende tilkoblinger:

JPproiler databasesonderingsvisning

Hvis vi er opptatt av å lære om ring interaksjonstre med databasen vår og se tilkoblinger som kan lekke, JProfiler takler dette pent.

Live Memory er en funksjon av JProfiler som lar oss se gjeldende minnebruk av applikasjonen vår. Vi kan se minnebruk for objektdeklarasjoner og -forekomster eller for hele anropstreet.

Når det gjelder tildelingstreet, kan vi velge å se ringetreet til levende gjenstander, søppeloppsamlede gjenstander eller begge deler. Vi kan også bestemme om dette tildelingstreet skal være for en bestemt klasse eller pakke eller alle klasser.

Skjermen nedenfor viser live minnebruk av alle objekter med antall forekomster:

JProfiler live-minnevisning

JProfiler støtter integrasjon med populære IDEer som Eclipse, NetBeans og IntelliJ. Det er til og med mulig å naviger fra øyeblikksbilde til kildekode!

3. YourKit

YourKit Java Profiler kjører på mange forskjellige plattformer og tilbyr separate installasjoner for hvert operativsystem som støttes (Windows, MacOS, Linux, Solaris, FreeBSD, etc.).

I likhet med JProfiler har YourKit kjernefunksjoner for å visualisere tråder, søppelsamling, minnebruk og minnelekkasjer, med støtte for lokal og ekstern profilering via ssh tunneling.

Her ser du raskt på minneprofileringsresultatene til en Tomcat-serverapplikasjon:

YourKit Java Profiler-minneprofilering av Tomcat-serverapplikasjonen

YourKit er også nyttig når du vil unntak fra profilen. Vi kan enkelt finne ut hvilke typer unntak som ble kastet og antall ganger hvert unntak skjedde.

YourKit har en interessant CPU-profileringsfunksjon som tillater fokusert profilering på visse områder av koden vår som metoder eller undertrær i tråder. Dette er veldig kraftig ettersom det tillater betinget profilering gjennom hva-hvis-funksjonen.

Figur 5 viser et eksempel på trådprofilgrensesnittet:

Figur 5. Grensesnitt for profilering av trådene for YourKit Java Profiler

Vi kan også profil SQL og NoSQL databasesamtaler med YourKit. Det gir til og med en visning for faktiske spørsmål som ble utført.

Selv om dette ikke er et teknisk hensyn, gjør den tillatende lisensieringsmodellen til YourKit det til et godt valg for flerbruker- eller distribuerte team, samt for enkeltlisenskjøp.

4. Java VisualVM

Java VisualVM er et forenklet, men robust profileringsverktøy for Java-applikasjoner. Som standard er dette verktøyet følger med Java Development Kit (JDK). Driften er avhengig av andre frittstående verktøy som tilbys i JDK, for eksempel JConsole, jstat, jstack, jinfo, og jmap.

Nedenfor kan vi se et enkelt oversiktsgrensesnitt for en pågående profileringsøkt ved bruk av Java VisualVM:

Java VisualVM lokal tomcat server app profilering

En interessant fordel med Java VisualVM er at vi kan utvide den til å utvikle nye funksjoner som plugins. Vi kan deretter legge til disse pluginene til Java VisualVMs innebygde oppdateringssenter.

Java VisualVM støtter lokal og ekstern profilering, samt minne- og CPU-profilering. For å koble til eksterne applikasjoner må du oppgi legitimasjon (vertsnavn / IP og passord etter behov) men gir ikke støtte for ssh-tunneling. Vi kan også velge å enten aktivere sanntidsprofilering med øyeblikkelige oppdateringer (vanligvis hvert 2. sekund).

Nedenfor kan vi se minneutsiktene til et Java-program som er profilert ved hjelp av Java VisualVM:

Java VisualVM hukommelse histogram

Med øyeblikksbildefunksjonen til Java VisualVM kan vi ta øyeblikksbilder av profiløkter for senere analyse.

5. NetBeans Profiler

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

Mens denne profilen deler mange likheter med Java VisualVM, det er et godt valg når vi vil ha alt pakket inn i ett program (IDE + Profiler).

Alle andre profilere som er diskutert ovenfor, gir plugins for å forbedre IDE-integrasjonen.

Skjermbildet nedenfor viser et eksempel på NetBeans Profiler-grensesnittet:

Netbeans Profiler telemetri-grensesnitt

Netbeans Profiler er også en godt valg for lett utvikling og profilering. NetBeans Profiler gir et enkelt vindu for å konfigurere og kontrollere profiløkten og vise resultatene. Det gir et unikt trekk ved å vite hvor ofte søppeloppsamling skjer.

6. Andre solide profiler

Noen hederlige omtaler her er Java Mission Control, New Relic og Prefix (fra Stackify) - disse har mindre markedsandel generelt, men fortjener absolutt en omtale. For eksempel er Stackifys prefiks et utmerket lett profileringsverktøy, godt egnet for profilering ikke bare Java-applikasjoner, men også andre webapplikasjoner.

7. Konklusjon

I denne oppskriften diskuterte vi profilering og Java Profilers. Vi så på funksjonene til hver Profiler og hva som informerer det potensielle valget mellom hverandre.

Det er mange Java-profiler tilgjengelig med noen som har unike egenskaper. Valget av hvilken Java-profil som skal brukes, som vi har sett i denne artikkelen, er for det meste avhengig av utviklerens utvalg av verktøy, analysenivået som kreves og profilens funksjoner.