I would like to detect an OutOfMemoryError
, take a heap dump, and automatically exit the Java program. Say I have the following command-line arguments for my JVM:
-XX:OnOutOfMemoryError="kill -9 %p"
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/tmp
Which happens first? Does the process dump memory and then quit, or the other way around?
I would rather rely on calling into a script that handles the ordering more deterministically i.e.
-XX:OnOutOfMemoryError="/<SomeStandardLocation>/heapAndQuit.sh"
heapAndQuit.sh will then employ a method to find the pid
of the current process.
One simple way to identify the pid is to use the log file location your process is writing to
lsof | grep /var/tmp/<yourlogfileName> | cut -d " " -f1 | uniq
I will then use jmap
to dump and kill -9
subsequently