2012-09-12 23 views
7

Ho un grande dump hprof (5 GB), creato dall'applicazione quando si è verificato OutOfMemoryError. (Utilizzo di XX: HeapDumpOnOutOfMemoryError).È possibile visualizzare i thread da hprof dump/threads nel dump dell'heap

Sfortunatamente non ci sono registri raccolti quando si è verificato questo errore. Ricreare questo richiederà un paio d'ore. Speravo che alcuni strumenti potessero mostrare la traccia dello stack di eccezioni o tutti gli stack di thread ecc da hprof.

Attualmente sto usando MAT, non ho potuto vedere un modo per ottenere informazioni sui thread. Quale strumento potrei usare?

(Non sono sicuro che il file hprof contenga informazioni su thread/posizione della chiamata quando OOM si è verificato).

(so per come prendere discarica discussione nei casi normali. Il problema qui è l'evento già accaduto, tutto quello che ho è la discarica hprof.)

+1

Prova VisualVM (http://docs.oracle.com/javase/6/docs/technotes/guides/visualvm/threads .html) –

+0

Il dump di heap non contiene informazioni sui thread. Dovresti dare un'occhiata alla discarica di thread. – SiB

+0

@ RC. sì, hprof caricato utilizzando VisualVM e ha l'opzione per mostrare i dump di thread. Potresti contrassegnare come risposta? – Jayan

risposta

3

MAT can show the threads directly now (forse questo è stato aggiunto poiché la domanda è stata posta).

discussioni Panoramica

per avere una panoramica di tutti i thread nel heap dump utilizzare la "Discussione Panoramica" nella barra degli strumenti, come mostrato nell'immagine qui sotto. In alternativa si potrebbe utilizzare il Query Browser> Thread Descrizione e Stacks query:

screenshot of toolbar icon

+0

!! Finalmente risposta alla mia domanda :) – Jayan

0

Non credo heap dump contiene informazioni filo tranne la radice GC. Se hai bisogno di informazioni relative al thread, devi anche fare il dump del thread.

0

Eclipse MAT consente di visualizzare i thread sospetti nel report Sospetti perdite. Cerca le classi nel tuo spazio dei nomi dell'applicazione con i loro numeri di linea per trovare la quantità di memoria che occupano nell'heap. Questo ti darà un pizzico di classi che perdono.

0

È possibile kill -3 l'id di processo per ottenere un dump di thread in uscita standard. Questo non uccide il processo java in modo da poterlo fare tutte le volte che vuoi.

come RC dichiarato visualVM è un buon strumento che ti darà Conteggi di oggetti per tipo di classe e tutti i tipi di grafici e strumenti di profilazione.

0

Usa visualvm.

cercare di analizzare il grafico quando lo spazio perm heap supera ... u dovrebbe anche controllare i campioni di memoria & salvare la sua istantanea ..

Analisi dello stack filo ... vi aiuterà a restringere al problema .

11

Risposta alla propria domanda. Il credito va a @ RC

  1. Aprire il dump utilizzando visualvm. Ci vuole un po '.
  2. click su "le discussioni al mucchio discarica" ​​

visual vm with threads at heapdump

+0

http://stackoverflow.com/a/11903624/173149 dire che questa è una "nuova" funzionalità del formato heap dump (datato intorno al 2010). – gavenkoa

+1

Per lungo tempo questa è stata la risposta. Ora MAT ha migliorato la segnalazione .. vedi risposta da @matt b: http://stackoverflow.com/questions/12381534/is-it-possible-to-view-threads-from-hprof-dump-threads-in-heap -dump/41243806 # 41243806 – Jayan

-1

Per attivare un'opzione vostro bisogno + e per disattivare l'opzione è necessario -

Ciò che confonde la documentazione è che mostra l'impostazione predefinita per rendere "chiara" l'impostazione che hai già. Quelli con + sono attivi per impostazione predefinita e quelli con - sono disattivati ​​per impostazione predefinita. Ciò significa che se si copia una qualsiasi delle opzioni + o - dalla documentazione non dovrebbe fare nulla (tranne quando il valore predefinito è cambiato nel tempo)

-XX: -HeapDumpOnOutOfMemoryError disattiva il dump dell'heap, che è l'impostazione predefinita.

-XX: + HeapDumpOnOutOfMemoryError attiva il dump dell'heap.