9

I have got a large (5GB) hprof dump, created by application when OutOfMemoryError occurred. (Using XX: HeapDumpOnOutOfMemoryError ).

Unfortunately there are no logs collected when this error happened. Re-creating this will take couple of hours. I was hoping if some tools could show the exception stack trace or all threads stacks etc from hprof.

I am currently using MAT, could not see a way to get thread information. Which tool I could use?

(I am not sure if hprof file has information about thread/location of call when OOM occurred).

( I do know to how to take thread dump in normal cases. The trouble here is the event already happened, all I have is the hprof dump. )

Jayan
  • 18,003
  • 15
  • 89
  • 143
  • 1
    Try visualvm (http://docs.oracle.com/javase/6/docs/technotes/guides/visualvm/threads.html) –  Sep 12 '12 at 05:09
  • Heap dump doesn't contain thread information. You should look at thread dump. – Bharat Sinha Sep 12 '12 at 05:12
  • @ RC . yes, loaded hprof using VisualVM and it has option to show thread dumps. Could you mark as answer? – Jayan Sep 12 '12 at 05:26

7 Answers7

12

Answering own question. Credit goes to @ RC

  1. Open the dump using visualvm. It takes a while.
  2. click on "threads at heap dump"

visual vm with threads at heapdump

Community
  • 1
  • 1
Jayan
  • 18,003
  • 15
  • 89
  • 143
  • http://stackoverflow.com/a/11903624/173149 say that this is "new" feature of heap dump format (dated near 2010). – gavenkoa Dec 08 '14 at 17:04
  • 1
    For long this was the answer. Now MAT has improved the reporting .. see answer from @matt b : http://stackoverflow.com/questions/12381534/is-it-possible-to-view-threads-from-hprof-dump-threads-in-heap-dump/41243806#41243806 – Jayan Dec 21 '16 at 05:15
9

MAT can show the threads directly now (perhaps this was added since the question was asked).

Threads Overview

To get an overview of all the threads in the heap dump use the "Thread Overview" button in the toolbar, as shown on the image below. Alternatively one could use the Query Browser > Thread Overview and Stacks query:

screenshot of toolbar icon

Community
  • 1
  • 1
matt b
  • 138,234
  • 66
  • 282
  • 345
0

I don't think heap dump contains thread information except GC root. If you need thread related information, you need to take thread dump also.

kosa
  • 65,990
  • 13
  • 130
  • 167
0

Eclipse MAT allows you to see the suspect threads in the Leak suspects report. Look for the classes in your application namespace with their line numbers to find how much memory they occupy in heap. This will give you a hint of leaky classes.

randominstanceOfLivingThing
  • 16,873
  • 13
  • 49
  • 72
0

You can kill -3 the process id to get a thread dump to standard out. This will not kill the java process so you can do it as many times as you want.

as RC stated visualVM is a good tool which will give you Object counts by class type and all kinds of graphs and profiling tools.

Bill
  • 141
  • 3
0

Use visualvm.

try to analyse the graph when perm heap space exceeds... u should also check the memory samples & save its snapshot..

Analysis the thread stack... will help you narrow down to the problem.

Shafi Ulla
  • 79
  • 5
-1

To turn on an option your need + and to turn off an option you need -

What is confusing about the documentation is that it shows the default setting to make it "clear" what setting you have already. The ones with + are on by default and the ones with - are off by default. This means if you copy any of the + or - options from the documentation they should do nothing (except where the default has changed over time)

-XX:-HeapDumpOnOutOfMemoryError turns off the heap dump, which is the default.

-XX:+HeapDumpOnOutOfMemoryError turns on the heap dump.

Peter Lawrey
  • 525,659
  • 79
  • 751
  • 1,130