2012-03-05 13 views
5

Quiero que mi java salga al capturar OutOfMemoryError, estoy usando -XX:+HeapDumpOnOutOfMemoryError para volcar el archivo hprof.
No puedo usar kill -9 <pid> porque la JVM debe estar activa mientras se está volcando el archivo hprof, ¿hay alguna forma de detener la JVM después de crear el archivo hprof?

Para que quede claro que estoy usando la versión JVM de Sun 6.OutOfMemoryError - cómo matar a la JVM después de crear el hprof

Respuesta

4

This page parece implicar que puede combinar-XX:+HeapDumpOnOutOfMemoryError y -XX:OnOutOfMemoryError="kill -9 %p"

Presumiblemente, se crea el volcado de pila antes de que el "On. .. "se ejecuta el comando. (Debe ser fácil juntar algo para probar esto.)

+1

Combiné estos dos argumentos de JVM, su suposición no es del todo correcta, la creación del volcado del montón paralelo al comando "En ...", en mi caso el kill ocurrió antes de que el volcado se haya creado por completo, la muerte de la JVM en el medio de la creación del volcado causó la corrupción del 'hprof'. –

+0

OK, entonces la página de Oracle es engañosa. Pero aún debería poder trabajar con ese comportamiento para obtener el comportamiento deseado. –

+0

echas de menos dos puntos en '-XX: OnOutOfMemoryError' – mighq