When your Java app crashes due to
OutOfMemoryError, you probably want to automatically restart your application. After all, what's the point of keeping the application running if a
OutOfMemoryError was thrown, since in that case you probably have a memory leak, so trying to catch the error and continue executing the app is unviable.
To do this, you can add
-XX:+ExitOnOutOfMemoryError to your startup flags, this will cause the JVM to automatically exit when a
OutOfMemoryError is thrown, sweet!
However, you may also want to create a heap dump when a
OutOfMemoryError is thrown, to analyze the heap dump later to figure out what triggered the error. In that case, use
-XX:+ExitOnOutOfMemoryError -XX:+HeapDumpOnOutOfMemoryError, this will create a heap dump on
OutOfMemoryError and then exit.
You can change the heap dump folder with
-XX:HeapDumpPath, so, if you want to store your heap dumps in the
/tmp/dump folder, use
Here's how you would use it when starting your application.
java -Xmx1G -Xms1G -XX:+ExitOnOutOfMemoryError -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/dump -jar ...