Una guida ai Java Profiler

1. Panoramica

A volte scrivere codice che viene eseguito solo non è sufficiente. Potremmo voler sapere cosa succede internamente, ad esempio come viene allocata la memoria, conseguenze dell'utilizzo di un approccio di codifica rispetto a un altro, implicazioni di esecuzioni simultanee, aree per migliorare le prestazioni, ecc. Per questo possiamo utilizzare i profiler.

Un Java Profiler è uno strumento che monitora i costrutti e le operazioni del bytecode Java a livello di JVM . Questi costrutti e operazioni di codice includono la creazione di oggetti, le esecuzioni iterative (incluse le chiamate ricorsive), le esecuzioni di metodi, le esecuzioni di thread e le raccolte di dati inutili.

In questo articolo, discuteremo dei principali Java Profiler: JProfiler, YourKit, Java VisualVM e Netbeans Profiler.

2. JProfiler

JProfiler è la scelta migliore per molti sviluppatori. Con un'interfaccia utente intuitiva, JProfiler fornisce interfacce per visualizzare le prestazioni del sistema, l'utilizzo della memoria, potenziali perdite di memoria e la profilazione dei thread.

Con queste informazioni, possiamo facilmente sapere cosa dobbiamo ottimizzare, eliminare o modificare - nel sistema sottostante.

Ecco come appare l'interfaccia di JProfiler:

Interfaccia panoramica di JProfiler con funzionalità

Come la maggior parte dei profiler, possiamo utilizzare questo strumento sia per applicazioni locali che remote. Ciò significa che è possibile profilare le applicazioni Java in esecuzione su macchine remote senza dover installare nulla su di esse .

JProfiler fornisce anche profili avanzati per database SQL e NoSQL . Fornisce supporto specifico per la creazione di profili di database JDBC, JPA / Hibernate, MongoDB, Casandra e HBase.

Lo screenshot seguente mostra l'interfaccia di sondaggio JDBC con un elenco di connessioni correnti:

Vista del sondaggio del database JProfiler

Se ci interessa conoscere l' albero delle chiamate delle interazioni con il nostro database e vedere le connessioni che potrebbero essere trapelate , JProfiler lo gestisce bene.

Live Memory è una funzionalità di JProfiler che ci consente di vedere l'utilizzo della memoria corrente dalla nostra applicazione . È possibile visualizzare l'utilizzo della memoria per le dichiarazioni e le istanze di oggetti o per l'intero albero delle chiamate.

Nel caso dell'albero delle chiamate di allocazione, possiamo scegliere di visualizzare l'albero delle chiamate di oggetti live, oggetti raccolti in modo indesiderato o entrambi. Possiamo anche decidere se questo albero di allocazione debba essere per una particolare classe o pacchetto o per tutte le classi.

La schermata seguente mostra l'utilizzo della memoria in tempo reale da parte di tutti gli oggetti con conteggi di istanze:

Visualizzazione della memoria live di JProfiler

JProfiler supporta l' integrazione con IDE popolari come Eclipse, NetBeans e IntelliJ. È anche possibile passare dall'istantanea al codice sorgente !

3. YourKit

YourKit Java Profiler funziona su molte piattaforme differenti e fornisce installazioni separate per ogni sistema operativo supportato (Windows, MacOS, Linux, Solaris, FreeBSD, ecc.).

Come JProfiler, YourKit ha funzionalità principali per la visualizzazione di thread, raccolte di rifiuti, utilizzo della memoria e perdite di memoria, con supporto per la profilazione locale e remota tramite tunneling ssh .

Ecco una rapida occhiata ai risultati della profilatura della memoria di un'applicazione server Tomcat:

YourKit Java Profiler profilatura della memoria dell'applicazione server Tomcat

YourKit è utile anche quelle volte in cui vogliamo profilare le eccezioni generate . Possiamo facilmente scoprire quali tipi di eccezioni sono state generate e il numero di volte in cui ciascuna eccezione si è verificata.

YourKit ha un'interessante funzione di profilazione della CPU che consente una profilazione mirata su alcune aree del nostro codice come metodi o sottostrutture nei thread. Questo è molto potente in quanto consente la profilazione condizionale attraverso la sua funzione what-if.

La Figura 5 mostra un esempio dell'interfaccia di profilazione dei thread:

Figura 5. Interfaccia di profilazione dei thread di YourKit Java Profiler

Possiamo anche profilare chiamate di database SQL e NoSQL con YourKit. Fornisce anche una visualizzazione per le query effettive che sono state eseguite.

Sebbene questa non sia una considerazione tecnica, il modello di licenza permissiva di YourKit lo rende una buona scelta per i team multiutente o distribuiti, nonché per gli acquisti di una licenza singola.

4. Java VisualVM

Java VisualVM è uno strumento di profilazione semplificato ma robusto per le applicazioni Java. Per impostazione predefinita, questo strumento è fornito in bundle con Java Development Kit (JDK). Il suo funzionamento si basa su altri strumenti indipendenti forniti nel JDK, come JConsole , jstat , jstack , jinfo e jmap .

Di seguito, possiamo vedere una semplice interfaccia panoramica di una sessione di profilazione in corso utilizzando Java VisualVM:

Profilazione delle app del server Tomcat locale Java VisualVM

Un vantaggio interessante di Java VisualVM è che possiamo estenderlo per sviluppare nuove funzionalità come plugin . Possiamo quindi aggiungere questi plugin al centro di aggiornamento integrato di Java VisualVM.

Java VisualVM supporta la creazione di profili locale e remota , nonché la creazione di profili di memoria e CPU. La connessione ad applicazioni remote richiede la fornitura di credenziali (nome host / IP e password se necessario) ma non fornisce supporto per il tunneling ssh . Possiamo anche scegliere di abilitare la profilazione in tempo reale con aggiornamenti istantanei (in genere ogni 2 secondi).

Di seguito, possiamo vedere l'outlook della memoria di un'applicazione Java profilata utilizzando Java VisualVM:

Istogramma heap di memoria Java VisualVM

Con la funzione snapshot di Java VisualVM, possiamo acquisire snapshot delle sessioni di profiling per un'analisi successiva .

5. NetBeans Profiler

NetBeans Profiler è fornito in bundle con NetBeans IDE open source di Oracle .

Sebbene questo profiler condivida molte somiglianze con Java VisualVM , è una buona scelta quando vogliamo che tutto sia racchiuso in un unico programma (IDE + Profiler).

Tutti gli altri profiler discussi sopra forniscono plugin per migliorare l'integrazione degli IDE.

La schermata sottostante mostra un esempio dell'interfaccia di NetBeans Profiler:

Interfaccia di telemetria di Netbeans Profiler

Netbeans Profiler è anche una buona scelta per lo sviluppo e la creazione di profili leggeri . NetBeans Profiler fornisce un'unica finestra per la configurazione e il controllo della sessione di profilazione e per la visualizzazione dei risultati. Offre una caratteristica unica di sapere quanto spesso si verifica la raccolta dei rifiuti .

6. Altri Solid Profiler

Alcune menzioni d'onore qui sono Java Mission Control, New Relic e Prefix (da Stackify): questi hanno una quota di mercato inferiore in generale, ma sicuramente meritano una menzione. Ad esempio, Stackify's Prefix è un eccellente strumento di creazione di profili leggero, adatto per la creazione di profili non solo per le applicazioni Java ma anche per altre applicazioni web.

7. Conclusione

In questo articolo, abbiamo discusso la creazione di profili e Java Profiler. Abbiamo esaminato le caratteristiche di ogni Profiler e ciò che informa la potenziale scelta dell'uno rispetto all'altro.

Sono disponibili molti profiler Java con alcuni che hanno caratteristiche uniche. La scelta di quale profiler Java utilizzare, come abbiamo visto in questo articolo, dipende principalmente dalla selezione di strumenti dello sviluppatore, dal livello di analisi richiesto e dalle caratteristiche del profiler.