Een gids voor Java-profielen

1. Overzicht

Soms is het schrijven van code die gewoon draait niet voldoende. We willen misschien weten wat er intern gebeurt, zoals hoe geheugen wordt toegewezen, gevolgen van het gebruik van de ene coderingsbenadering boven de andere, implicaties van gelijktijdige uitvoeringen, gebieden om de prestaties te verbeteren, enz. We kunnen hiervoor profilers gebruiken.

Een Java Profiler is een tool die bewaakt Java-bytecode-constructies en bewerkingen op JVM-niveau. Deze codeconstructies en bewerkingen omvatten het maken van objecten, iteratieve uitvoeringen (inclusief recursieve aanroepen), het uitvoeren van methoden, het uitvoeren van threads en garbagecollection.

In dit artikel bespreken we de belangrijkste Java-profielen: JProfiler, YourKit, Java VisualVM en de Netbeans Profiler.

2. JProfiler

JProfiler is een eerste keus voor veel ontwikkelaars. Met een intuïtieve gebruikersinterface biedt JProfiler interfaces voor het bekijken van systeemprestaties, geheugengebruik, mogelijke geheugenlekken en threadprofilering.

Met deze informatie kunnen we gemakkelijk weten wat we nodig hebben om te optimaliseren, elimineren of wijzigen - in het onderliggende systeem.

Hier is hoe de interface van JProfiler eruit ziet:

JProfiler overzichtsinterface met functies

Zoals de meeste profilers, kunnen we deze tool gebruiken voor zowel lokale als externe toepassingen. Dit betekent dat het mogelijk is om profileer Java-applicaties die op externe machines worden uitgevoerd zonder dat u er iets op hoeft te installeren.

JProfiler biedt ook geavanceerde profilering voor zowel SQL- als NoSQL-databases. Het biedt specifieke ondersteuning voor het profileren van JDBC-, JPA / Hibernate-, MongoDB-, Casandra- en HBase-databases.

De onderstaande schermafbeelding toont de JDBC-meetinterface met een lijst met huidige verbindingen:

JProfiler database onderzoekende weergave

Als we graag meer willen weten over het oproepboom van interacties met onze database en zie verbindingen die kunnen lekken, JProfiler pakt dit keurig aan.

Live Memory is een kenmerk van JProfiler waarmee we dat kunnen bekijk het huidige geheugengebruik door onze applicatie. We kunnen geheugengebruik bekijken voor objectverklaringen en instanties of voor de volledige oproepboom.

In het geval van de toewijzingsoproepboom, kunnen we ervoor kiezen om de oproepboom van levende objecten, verzamelde objecten of beide te bekijken. We kunnen ook beslissen of deze toewijzingsboom voor een bepaalde klasse of pakket of voor alle klassen moet zijn.

Het onderstaande scherm toont het live geheugengebruik door alle objecten met instantietellingen:

JProfiler live geheugenweergave

JProfiler ondersteunt integratie met populaire IDE's zoals Eclipse, NetBeans en IntelliJ. Het is zelfs mogelijk navigeer van snapshot naar broncode!

3. YourKit

YourKit Java Profiler draait op veel verschillende platforms en biedt aparte installaties voor elk ondersteund besturingssysteem (Windows, MacOS, Linux, Solaris, FreeBSD, etc.).

Net als JProfiler heeft YourKit kernfuncties voor het visualiseren van threads, garbagecollection, geheugengebruik en geheugenlekken, met ondersteuning voor lokale en externe profilering via ssh-tunneling.

Hier is een korte blik op de geheugenprofileringsresultaten van een Tomcat-servertoepassing:

YourKit Java Profiler-geheugenprofilering van de Tomcat-servertoepassing

YourKit is ook handig als we dat willen profiel gegooid uitzonderingen. We kunnen gemakkelijk achterhalen welke soorten uitzonderingen zijn gegenereerd en hoe vaak elke uitzondering is opgetreden.

YourKit heeft een interessante CPU-profileerfunctie waarmee gerichte profilering op bepaalde delen van onze code mogelijk is zoals methoden of substructuren in threads. Dit is erg krachtig omdat het voorwaardelijke profilering mogelijk maakt via de wat-als-functie.

Figuur 5 toont een voorbeeld van de thread-profiling-interface:

Figuur 5. YourKit Java Profiler threads profileringsinterface

We kunnen ook profiel SQL- en NoSQL-databaseaanroepen met YourKit. Het biedt zelfs een overzicht van de daadwerkelijke uitgevoerde zoekopdrachten.

Hoewel dit geen technische overweging is, maakt het tolerante licentiemodel van YourKit het een goede keuze voor teams met meerdere gebruikers of gedistribueerde teams, evenals voor aankopen met één licentie.

4. Java VisualVM

Java VisualVM is een vereenvoudigde maar robuuste profileringstool voor Java-toepassingen. Deze tool is standaard gebundeld met de Java Development Kit (JDK). De werking ervan is afhankelijk van andere zelfstandige tools die in de JDK worden geleverd, zoals JConsole, jstat, jstack, jinfo, en jmap.

Hieronder zien we een eenvoudige overzichtsinterface van een lopende profileringssessie met behulp van Java VisualVM:

Java VisualVM lokale tomcat-serverapp-profilering

Een interessant voordeel van Java VisualVM is dat we dat kunnen breid het uit om nieuwe functionaliteiten als plug-ins te ontwikkelen. We kunnen deze plug-ins vervolgens toevoegen aan het ingebouwde updatecentrum van Java VisualVM.

Java VisualVM ondersteunt lokale en externe profilering, evenals geheugen- en CPU-profilering. Om verbinding te maken met externe applicaties, moet u inloggegevens opgeven (hostnaam / IP en wachtwoord indien nodig) maar biedt geen ondersteuning voor SSH-tunneling. We kunnen er ook voor kiezen om beide in te schakelen realtime profilering met onmiddellijke updates (meestal elke 2 seconden).

Hieronder zien we de geheugenvooruitzichten van een Java-applicatie die is geprofileerd met Java VisualVM:

Java VisualVM-geheugenheap-histogram

Met de snapshot-functie van Java VisualVM kunnen we dat maak snapshots van profileringssessies voor latere analyse.

5. NetBeans Profiler

De NetBeans Profiler is gebundeld met Oracle's open source NetBeans IDE.

Terwijl deze profiler deelt veel overeenkomsten met Java VisualVM, het is een goede keuze als we alles in één programma willen hebben (IDE + Profiler).

Alle andere hierboven besproken profilers bieden plug-ins om de integratie van IDE's te verbeteren.

Onderstaande screenshot toont een voorbeeld van de NetBeans Profiler-interface:

Telemetrie-interface van Netbeans Profiler

Netbeans Profiler is ook een goede keuze voor lichtgewicht ontwikkeling en profilering. NetBeans Profiler biedt een enkel venster voor het configureren en besturen van de profileringssessie en het weergeven van de resultaten. Het geeft een uniek kenmerk van weten hoe vaak garbage collection plaatsvindt.

6. Andere solide profilers

Enkele eervolle vermeldingen hier zijn Java Mission Control, New Relic en Prefix (van Stackify) - deze hebben over het algemeen minder marktaandeel, maar verdienen zeker een vermelding. Stackify's Prefix is ​​bijvoorbeeld een uitstekende lichtgewicht profileringstool, zeer geschikt voor het profileren van niet alleen Java-applicaties, maar ook andere webapplicaties.

7. Conclusie

In dit artikel hebben we profilering en Java-profielen besproken. We hebben gekeken naar de kenmerken van elke Profiler en wat de mogelijke keuze van de ene boven de andere bepaalt.

Er zijn veel Java-profilers beschikbaar, waarvan sommige unieke kenmerken hebben. De keuze van welke Java-profiler moet worden gebruikt, zoals we in dit artikel hebben gezien, is grotendeels afhankelijk van de selectie van tools door een ontwikkelaar, het vereiste analyse-niveau en de kenmerken van de profiler.