Jmap e jstack per principianti

Jmap e jstack per principianti
JMAP e JStack sono probabilmente le utility più preziose nella cassetta degli attrezzi di qualsiasi sviluppatore Java. Con la funzionalità di entrambi questi strumenti combinati, è possibile eseguire il debug di problemi ed eseguire la diagnostica per il programma Java che stai codificando. Come la coppia fondamentale di strumenti di debug, è essenziale sapere come lavorare con loro.

Questo sarà un tutorial su JMAP e JStack Utilities in Java per principianti. Quando hai finito con questo tutorial, avrai un'idea migliore di come questi due strumenti possono aiutarti a risolvere i problemi e il debug.

Esecuzione della diagnostica con Jstack

JStack, in sostanza, è un'utilità della linea di comando utilizzata nella risoluzione dei problemi. Con Jstack, è possibile avere i dump thread per programmi, processi o file core Java specifici visualizzati per identificare i problemi. Questo, a sua volta, rivela maggiori dettagli come il nome della classe completa, il nome del metodo, il numero di riga dell'elemento e l'indice bytecode. Jstack ti consente di vedere quale azione sta intraprendendo ogni riga di codice quando esegui il programma.

L'esecuzione della diagnostica è ciò per cui l'utilità Jstack è più comunemente usata. Si applica il comando jstack a un file/ processo core specifico e riporta ogni thread collegato con i thread JVM (thread VM interni inclusi), nonché i frame dello stack originale. Oltre a ciò, Jstack può anche identificare le sovrapposizioni di utilizzo delle risorse (deadlocks) per risolvere il programma. Queste funzionalità consentono agli utenti di eliminare la necessità di fare affidamento su qualsiasi altra utilità per eseguire una diagnosi completa per eliminare eventuali bug o errori nel programma.

Guidare una discarica

Se un programma non risponde o se un processo è bloccato, è possibile individuare la radice esatta del problema eseguendo un dump dello stack. È particolarmente utile quando anche il processo Jstack non risponde, quindi puoi utilizzare il passaggio -f a tuo vantaggio.

Una tipica discarica dello stack dovrebbe assomigliare al contenuto seguente:

Recupera le tracce dai dump core

Se non hai familiarità con i dump di base, sono dump di memoria che mantengono un registro per file o programmi, documentando il loro contenuto e indica in un determinato momento, in genere quando un problema subisce un crash senza precedenti. I dump di base sono abbastanza flessibili in termini di contenuto che possono contenere: e possono essere resi molto dettagliati per applicazioni particolari.

Per estrarre le tracce dello stack da un dump centrale, digita il comando di seguito:

$ Jstack $ java_home/bin/java core

Stack misto

Spesso incontrerai errori troppo grandi per essere identificati con le stack Java da sole. Qui è dove dovrai tirare su i telai dello stack nativo e vederli con le pile Java. I frame nativi vengono generati utilizzando il linguaggio C/C ++, e questi possono essere un salvavita quando si tratta di eseguire la diagnostica.

Per stampare le pile native, utilizzare il comando -m come illustrato di seguito:


Identificare le perdite con l'utilità JMAP

Come sviluppatore Java emergente (suppongo che tu sia ancora un principiante, perché altrimenti saresti su un tutorial JMAP?), eseguirai la diagnostica molto più spesso di quanto tu possa capire. I problemi possono assumere la forma del ingombro della memoria, manifestandosi come un mucchio di accumulazione continua che non scompare così facile, o forse come un ritardo nel rilasciare un arraylist.

Per bilanciare questi offset, prima identificherai queste perdite prima di risolverle. Lo strumento più potente che hai a tua disposizione in questo senso è l'utilità JMAP. L'utilità JMAP allevia il problema registrando le dimensioni e lo stato del mucchio di accumulo.

Ecco come userai il comando JMAP quando si sceglie le perdite.

-Comando heap

Il comando -Hap rivela in dettaglio le informazioni sul mucchio. Ad esempio, è possibile acquisire informazioni relative agli algoritmi GC, affinare i dettagli relativi a ciascun thread coinvolto in uno dei suoi processi. Puoi anche vedere i rapporti sull'utilizzo del heap e anche in alcuni dettagli. JMAP rivelerà informazioni sulla capacità termica e la memoria attualmente disponibile quando viene richiesto di generare report heap.

Istogramma heap

Per visualizzare meglio i rapporti presentati JMAP, è possibile creare un istogramma. A tal fine, hai l'opzione -histo che stampa l'istogramma per un file core del processore Java. Se applicato a un processo in esecuzione, vedrai la dimensione della memoria nei byte, quanti oggetti li occupano, con i loro nomi di classe.

$ Jmap -histo \/java/re/javase/6/ultimo/binaries/solaris -apparc/bin/java core.27421

Prima di concludere:

Dobbiamo parlare Statistiche permanenti di generazione. In Java, la generazione permanente fa parte del mucchio che contiene tutta la colpita della macchina virtuale. Tra le altre cose, contiene dettagli sul metodo e gli oggetti di classe. Questi dettagli includono il numero esatto di classi, il numero di byte in servizio per ciascun caricatore di classe, l'indirizzo del caricatore di classe e l'indirizzo del caricatore di classe genitore e un'indicazione se il programma verrà mantenuto o inviato alla spazzatura Collezione più tardi.

In sintesi

Ora che sai come usare Jstack e JMAP, hai due degli strumenti di risoluzione dei problemi più importanti a tua disposizione. Questo tutorial ha illustrato come puoi identificare le radici di diversi problemi nel programma rivelando le pile e i thread nativi. Abbiamo anche discusso di come correggere le perdite di heap con JMAP.

Questo è tutto per questa lezione. Fino alla prossima volta.