Utilizzo del profiler HPROF

HPROF è un profiler dimostrativo fornito con IBM® SDK che utilizza JVMTI per raccogliere e registrare informazioni sull'esecuzione di Java™ . È possibile utilizzare HPROF per determinare quali parti di un programma utilizzano la maggior parte della memoria o del tempo del processore.

Per migliorare l'efficienza delle applicazioni, è necessario sapere quali parti del codice utilizzano grandi quantità di memoria e risorse del processore. HPROF è un agent JVMTI di esempio ed è avviato utilizzando la sintassi seguente:
java -Xrunhprof[:<option>=<value>,...] <classname>

Quando si esegue Java con HPROF, viene creato un file al termine del programma. Questo file si trova nella directory di lavoro corrente e viene denominato java.hprof.txt (java.hprof se viene utilizzato il formato binario) a meno che non sia stato fornito un nome file diverso. Questo file contiene un numero di sezioni differenti, ma il formato e il contenuto esatti dipendono dalle opzioni selezionate.

Se hai bisogno di ulteriori informazioni su HPROF che sono contenute in questa sezione, vedi https://docs.oracle.com/javase/8/docs/technotes/samples/hprof.html.

Il comando java -Xrunhprof:help mostra le opzioni disponibili:

heap=dump|sites|all
Questa opzione consente di analizzare l'utilizzo della memoria. Indica a HPROF di generare tracce di stack, da cui è possibile vedere dove è stata allocata la memoria. Se si utilizza l'opzione heap=dump , si ottiene un dump di tutti gli oggetti attivi nell'heap. Con heap=sites, si ottiene un elenco ordinato di siti con gli oggetti più allocati all'inizio. Il valore predefinito all fornisce entrambi i tipi di output.
cpu=samples|times|old
L'opzione cpu fornisce informazioni utili per determinare dove il processore impiega la maggior parte del tempo. Se cpu è impostato su samples, la JVM sospende l'esecuzione e identifica quale chiamata di metodo è attiva. Se la frequenza di campionamento è abbastanza alta, si ottiene una buona immagine di dove il vostro programma passa la maggior parte del suo tempo. Se cpu è impostato su times, si ricevono misurazioni precise del numero di volte in cui ogni metodo è stato richiamato e della durata di ogni esecuzione. Anche se questa opzione è più accurata, rallenta il programma. Se cpu è impostato su old, i dati di creazione profili vengono prodotti nel vecchio formato HPROF.
intervallo=s|n
L'opzione di intervallo si applica solo a cpu=samples e controlla il tempo di inattività del thread di campionamento tra i campioni degli stack di thread.
monitor=s|n
L'opzione monitor consente di comprendere in che modo la sincronizzazione influenza le prestazioni dell'applicazione. I controlli implementano la sincronizzazione del thread. L'acquisizione di informazioni sui monitor può indicare quanto tempo i diversi thread stanno impiegando quando si tenta di accedere alle risorse già bloccate. HPROF fornisce anche un'istantanea dei monitor in uso. Queste informazioni sono utili per rilevare i deadlock.
formato=a|b
Il valore predefinito per il file di output è il formato ASCII. Impostare format su 'b' se si desidera specificare un formato binario, richiesto per alcuni programmi di utilità come Heap Analysis Tool.
file= < nomefile>
Utilizzare l'opzione file per modificare il nome del file di emissione. Il nome predefinito per un file ASCII è java.hprof.txt. Il nome predefinito per un file binario è java.hprof.
forza=s|n
Generalmente, il valore predefinito (force=y) sovrascrive le informazioni esistenti nel file di output. Quindi, se si dispone di più JVM in esecuzione con HPROF abilitato, utilizzare force=n, che aggiunge ulteriori caratteri al nome del file di output in base alle esigenze.
net= < host>: < port>
Per inviare l'output sulla rete piuttosto che su un file locale, utilizzare l'opzione net .
depth= < dimensione>
L'opzione depth indica il numero di frame del metodo da visualizzare in una traccia di stack. Il valore predefinito è 4.
thread=s|n
Se si imposta l'opzione thread su y, l'ID thread viene stampato accanto a ciascuna traccia. Questa opzione è utile se non è possibile vedere quale thread è associato a quale traccia. Questo tipo di problema potrebbe verificarsi in un'applicazione a più thread.
doe=s|n
Il comportamento predefinito è quello di raccogliere le informazioni sul profilo quando un'applicazione esce. Per raccogliere i dati di creazione profili durante l'esecuzione, impostare doe (dump all'uscita) su n.
msa=s|n
Questa funzione non è supportata sulle piatteforme IBM SDK.
cutoff= < valore>
Molte voci campione vengono prodotte per una piccola percentuale del tempo di esecuzione totale. Per impostazione predefinita, HPROF include tutti i percorsi di esecuzione che rappresentano almeno il 0.0001 percento del tempo impiegato dal processore. È possibile aumentare o diminuire il punto di interruzione utilizzando questa opzione. Ad esempio, per eliminare tutte le voci che rappresentano meno di un quarto del tempo di esecuzione totale, specificare cutoff=0.0025.
verbo=s|n
Questa opzione genera un messaggio quando vengono eseguiti i dump. Il valore predefinito è y.
lineno=s|n
Ogni frame di solito include il numero di riga che è stato elaborato, ma è possibile utilizzare questa opzione per eliminare i numeri di riga dall'elenco di output. Se abilitato, ogni frame contiene il testo Unknown line invece del numero di riga.
TRACE 1056:
java/util/Locale.toUpperCase(Locale.java:Unknown line)
java/util/Locale.<init>(Locale.java:Unknown line)
java/util/Locale.<clinit>(Locale.java:Unknown line)
sun/io/CharacterEncoding.aliasName(CharacterEncoding.java:Unknown line)