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.
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 lineinvece 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)