Tengo un proceso crítico ejecutándose en java (1.6), con un gancho de apagado registrado. En algunos casos donde recibo un problema de OOM (más detalles a continuación sobre el tema), el proceso se detiene de repente, no obtengo ninguno de mis registros, mi captura (Throable x) no capta la excepción.jvm: ¿es posible descubrir que el proceso se está cerrando debido a un OOM mientras está en el gancho de apagado?
Pero el gancho de cierre funciona. Entonces, si hubiera una manera de saber que el proceso se va a cerrar debido a una desagradable OOM, podría registrar la información necesaria antes de salir.
¿Hay alguna manera de hacerlo?
Acerca de OOM: No estoy seguro de cuál es la excepción porque, como he dicho, no queda atrapado. Sé que es un OOM porque comienzo el proceso con
-XX:+HeapDumpOnOutOfMemoryError
y obtengo un archivo de volcado de almacenamiento dinámico. En otros casos, se detecta una excepción, y se trata de un ava.lang.OutOfMemoryError: se excedió el límite superior del GC. Pero no estoy seguro de que siempre sea este el caso.
EDIT:
En caso de que no está claro: No estoy tratando de evitar la OOM, ya que puede suceder por razones válidas en algún escenario, sólo quiero para asegurarse de que está claro en el archivos de registro de aplicación
Mi pregunta es: ¿es posible descubrir que el proceso se está cerrando debido a un OOM mientras está en el gancho de apagado?
Necesito hacer esto mediante programación y desde el mismo proceso.
Por ahora, el mejor enfoque es ver si existe un archivo de volcado del montón java_pid_pid de process_.hprof (sé el pid) con fecha reciente y deducir que había un OOM. Supongo que podría probar Runtime.getRuntime(). FreeMemory() e informar el problema si la memoria disponible es muy baja, pero no estoy seguro de qué tan confiable es, quizás cuando el proceso se apaga ya ha liberado mucha memoria, el enfoque de arriba es lo mejor, creo.
Entonces su pregunta es: "¿Qué sucede?" - ¿derecho? – dacwe
No se enfade con la pregunta, pero ¿capta (Excepción x) o captura (Throable x) como OOM es Throable, estoy seguro de que lo sabe y probablemente no sea atrapado si sucede, pero aún así vale la pena verificar ... –
como menciono (tal vez no está claro, voy a editar de nuevo) Tengo una trampa (Throable x) no está teniendo efecto. gracias – Persimmonium