2011-03-01 29 views
12

Necesito investigar bloqueos de una aplicación de cliente Java. Es una aplicación Swing, que se ejecuta en entorno Java Web Start en Java SE 6 Update 23 en Windows. Desafortunadamente para algunos casos de bloqueo el archivo hs_err_pid no fue creado. No estaba en el escritorio, así que lo busqué en la PC y no lo encontré (había un viejo archivo hs_err_pid en el escritorio, para la misma aplicación, por lo que es razonable suponer que debería haberse creado uno nuevo). ahí también). No hay ninguna excepción en el registro al final, como suele ocurrir cuando JVM falla en la excepción de Java, por lo que parece un bloqueo que debería dar como resultado la creación del archivo hs_err_pid.¿Qué puede causar que el archivo hs_err_pid no se cree en el bloqueo?

¿Debo configurar algo para que funcione? ¿Puede la configuración del Dr. Watson afectar la creación del archivo hs_err_pid?

Gracias

Nos configurados Dr' Watson y analizaron el archivo de volcado de memoria, que fue creado después de la aplicación se estrelló de nuevo. El error que vi fue "Violación de acceso". Desde el seguimiento de la pila, pude ver que el bloqueo se debe a una excepción en un código nativo de un tercero que utilizamos. Esto fue suficiente para delegar el problema a ellos.

Resultado final:
1. Algunos bloqueos de Java no se manejan como esperaba JVM, por lo que no se crea el archivo hs_err_pid.
2. La configuración del sistema operativo para crear un volcado del núcleo puede ayudar en esos casos, ya que el bloqueo que no está manejado por JVM será manejado por el sistema operativo. Obtendrá menos información en este caso, aún así puede ser útil.

+0

JVM falla en la excepción de Java: cuál es la excepción, puede pegar aquí el rastro de la pila o el código. –

+1

@Suresh - está tratando de * encontrar * el resultado de registro que le dará más detalles del bloqueo (incluido el rastreo de excepción, si corresponde). –

+0

No escribirá el archivo si el proceso no tiene acceso al directorio en el que normalmente lo escribiría. –

Respuesta

3

JDK 5 http://java.sun.com/j2se/1.5/pdf/jdk50_ts_guide.pdf

When a fatal error occurs an error log is created in the file 

hs_err_pid.log (donde es el ID de proceso del proceso). Donde es posible, el archivo se crea en el directorio de trabajo del proceso. En el caso de que el archivo no se puede creado en el directorio de trabajo (espacio insuficiente, el permiso problema, o cualquier otro problema), entonces el archivo se crea en el directorio temporal para el sistema operativo. En Solaris y Linux, el directorio temporal es /tmp. En Windows, el directorio temporal se especifica mediante el valor de la variable de entorno TMP o que no está definido, el valor de la variable de entorno TEMP .

+0

Ya existe un viejo archivo hs_err_pid para nuestra aplicación en el escritorio del usuario (ahí es donde está el enlace a la aplicación, por lo que ese es el directorio de trabajo), por lo que el usuario tiene acceso al directorio. Parece que el archivo no se ha creado en algunas condiciones específicas –

+0

@Leonid: ok. Este hilo podría ayudarlo http://boardreader.com/thread/JVM_Crash_log_file_hs_err_pid_log_not_fo_vvqzX37n41.html –

6

Tenga en cuenta que los archivos hs_err_pid.log solo se crean si se produce un bloqueo de JVM real.

Si su aplicación "solo" se cierra debido a una excepción no controlada en alguna parte, entonces no se creará dicho archivo.

¿Estás seguro de que el bloqueo fue un verdadero bloqueo de JVM?

+0

Todas las excepciones no controladas se imprimen en el registro. Cuando la aplicación se cierra con excepción no controlada, la vemos al final del archivo de registro, en este caso no hay excepción en el registro. –

7

Si el bloqueo ocurre como resultado de un desbordamiento de pila nativo (normalmente resulta en un SIGSEGV cuando la aplicación intenta leer/escribir una página de protección de pila), no se genera ningún archivo hs_err_pid en muchas plataformas (por ejemplo, Linux) el proceso que crea el archivo no se puede completar si está fuera del espacio de la pila.

+0

No fue el caso del desbordamiento de la pila nativa. Configuramos el Dr. 'Watson y analizamos el archivo de volcado del núcleo. El error que vi fue "Violación de acceso". –

+0

La violación de acceso de pozo y el desbordamiento de pila no son mutuamente excluyentes. Lo que sucede cuando ocurre un desbordamiento de pila depende del sistema operativo, el entorno de ejecución, cómo ocurre el desbordamiento, etc. – BeeOnRope

+0

Por ejemplo, en Linux, un desbordamiento de pila generalmente produce (a menudo?) SIGSEV, que es equivalente a una infracción de acceso en Windows. Otras cosas, como el acceso a un puntero malo, pueden causar SIGSEV, pero en estos otros casos, la JVM suele ser capaz de crear un archivo hs_err_pid. – BeeOnRope

Cuestiones relacionadas