2011-01-11 28 views
40

En el registro de mi aplicación (usando log4j), veo una NullPointerException, pero sin el seguimiento de la pila. Lo sé como una optimización, cuando ocurre una excepción muchas veces: el jvm deja de producir el seguimiento de la pila. El problema es que la excepción ocurrió hace un tiempo, y todos mis registros están llenos con la excepción sin el seguimiento de la pila. ¿Hay alguna manera de "restablecer" este mecanismo, por lo que la siguiente excepción arrojada se imprimirá con el seguimiento completo de la pila? No quiero reiniciar la aplicación, ya que es difícil reproducir este error, y el reinicio puede hacer que "desaparezca" ...Excepción recurrente sin un seguimiento de pila: ¿cómo restablecerlo?

¡Gracias!

+1

"Lo sé como una optimización, cuando ocurre una excepción muchas veces - el jvm deja de producir el seguimiento de la pila". ¿Sabes cómo? No es verdad. – skaffman

+0

puede ser debido a que en el bloque catch solo se ha registrado la causa de la excepción –

+3

Sí, es una especie de optimización: consulte la respuesta de @dogbane. @Jigar: esto no está relacionado con el registro, la excepción en sí no tiene seguimiento de pila. – duduamar

Respuesta

66

Pruebe a ejecutar con la siguiente propiedad JVM:

-XX:-OmitStackTraceInFastThrow 

Desde el Release Notes:

El compilador en el servidor de VM ahora proporciona trazas de pila correctos para todos "fría" incorporada excepciones Para fines de rendimiento de , cuando se lanza una excepción de este tipo varias veces, se puede volver a compilar el método . Después de la recompilación de , el compilador puede elegir una táctica más rápida utilizando excepciones preasignadas que no proporcionan una pila traza. Para deshabilitar por completo el uso de de excepciones preasignadas, use esta nueva marca : -XX:-OmitStackTraceInFastThrow.

+2

Gracias, eso suena bien. ¿Es posible habilitar esta bandera sobre la marcha para ejecutar un proceso de Java? – duduamar

+0

@duduamar No lo sé con certeza, pero creo que no se puede. – dogbane

+1

@duduamar: ahora hay un ticket abierto para cambiar este indicador en tiempo de ejecución - [JDK-8046503 - Posibilidad de restablecer el contador OmitStackTraceInFastThrow] (https://bugs.openjdk.java.net/browse/JDK-8046503). Aún abierto sin embargo. – sleske

Cuestiones relacionadas