mchr
mchr

Reputation: 6251

Collecting Java heapdump under load

I am running load against Tomcat 6 running on Java 6. I want to collect a heapdump of the Java heap while the Tomcat server is under load. I normally use jmap -dump to collect my heapdumps.

However, when I try to do this when Tomcat is handling a high load I find that the heapdump collection fails.

Is jmap the best tool for collecting a heap dump from a process under load? What are the possible causes which would cause jmap to fail to collect a heapdump?

If jmap is not the best tool - what is better?

It is entirely acceptable to me for jmap (or some other tool) to stop the world within the Java process while the heap dump is taken.

Upvotes: 5

Views: 4465

Answers (3)

mchr
mchr

Reputation: 6251

I have found that running Tomcat with a JMX port allows me to take a remote heapdump using visualvm. This succeeded for me when jmap failed.

Upvotes: 2

Danny Thomas
Danny Thomas

Reputation: 2199

I've also found jmap can pretty temperamental. If you're having problems:

  • Try it again. It often manages to get a heap dump after a couple of attempts if it first fails
  • Use the -F option
  • Add -XX:+HeapDumpOnOutOfMemoryError as a standard configuration to proactively take heap dumps when an OOM error is thrown
  • Run Tomcat interactively and add the heap dump on ctrl-break option. This gives you a thread dump too, something you'll probably need anyway
  • If your heap size is especially large and you have a repeatable condition, temporarily lower your heap size. It makes the resulting file much easier to handle, takes less time and is more likely to succeed

Upvotes: 2

sourcerebels
sourcerebels

Reputation: 5180

Is jmap the best tool for collecting a heap dump from a process under load?

I think: No it isn't. From this link:

NOTE - This utility is unsupported and may or may not be available in future versions of the JDK.

Upvotes: 2

Related Questions