Tomcat 7: Heap dump on Out Of Memory errors.

In your /usr/share/tomcat7/bin/ file, add this to JAVA_OPTS file. For example:

	JAVA_OPTS='-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/dir'

Your JAVA_OPTS could most likely contain other options. But these will make a core dump when tomcat runs out of memory. And dump it to that location (make sure that is writable by your application / server).

If you, for example, create a servlet with this code it will cause a heap dump:

ArrayList<String> a = new ArrayList<String>();
while(true) {

Run it and you will see this in catalina.out:

	java.lang.OutOfMemoryError: Java heap space
	Dumping heap to /path/to/dir/java_pid32394.hprof ...
	Heap dump file created [334354454 bytes in 2.124 secs]
	Exception in thread "http-bio-8080-exec-250" java.lang.OutOfMemoryError: Java heap space
		at java.util.Arrays.copyOf(
		at java.util.Arrays.copyOf(

You can then take that hprof file and run it in a memory analyser, like Eclipse MAT or jhat.

If the dump is particularly large, you'll have to ensure the program parsing it has enough memory. In the case of jhat, you pass it a parameter to do so:

	jhat -J-mx1000m /path/to/java_pid32394.hprof
java java-tomcat java-memory

Edit on github
comments powered by Disqus
Click me