2009-05-12 23 views
8

Chicos cuando la JVM se bloquea, escribe un registro de errores hs_err_pid.log. Quiero averiguar qué causó que la JVM se bloquee? Cómo entender estos registros, está documentado en cualquier lugar sobre cómo se organiza este registro. Traté de buscar en la red, pero sin éxito :-(Cómo entender los errores del punto de acceso de Java

Señalando a la URL de relevante será apreciada. Gracias.

Respuesta

5

A menos que usted está llamando código nativo (JNI), nada en el código debe hacer cada vez JVM se cuelga, por lo que la información de rastreo de pila en ese archivo de registro probablemente no sea útil para la mayoría de los desarrolladores. Probablemente sea por eso que no esté documentado (al menos externamente). Entonces, lo mejor es, probablemente, presentar un informe de error según lo sugerido por el mensaje de error

Pero, si realmente quiere entenderlo, Kohsuke's Blog tiene las mercancías. Como de costumbre. :)

+0

Otras cosas malas pueden suceder que pueden inducir un bloqueo de JVM. Lo he visto con el mantenimiento del sistema de archivos en el mismo controlador pero con puntos de montaje separados. Lo he visto al reemplazar un archivo jar existente antes de detener el tomcat. (Vaya). Pude deducir estas dos causas por la información en hs_err_pid.log con las personas en el foro de Sun Java. –

+0

Realmente siento que tengo que -1 esto. No solo se vincula a un blog, sino que el blog no me proporciona ninguna información que me beneficie para descubrir por qué mi programa se ha bloqueado. Como tal, simplemente no responde la pregunta. :/ – Joehot200

+0

El enlace está ahora muerto. – jdv

0

Para empezar, busque la línea superior que se parece a "ntdll.dll + 0x2000".

Si el punto de acceso está ocurriendo en su código nativo (es decir, el archivo DLL es uno de los suyos), y luego encontrar la manera de convencer a su compilador para producir una lista de asignaciones de DLL compensado en el número de línea. Obviamente, eso puede significar que necesita volver a ejecutar con la DLL recién compilada y esperar a que el problema vuelva a ocurrir.

De lo contrario, vea si la búsqueda de esa línea específica muestra algo en Google, teniendo en cuenta que el mismo error podría significar una gran cantidad de cosas. Y vea si el nombre de la DLL parece algo reconocible, p. un nombre de controlador de impresora, un controlador de gráficos o algún otro componente que pueda rastrear a una llamada en particular. Cualquiera que sea el componente, es posible que pueda actualizarlo a una versión fija o evitar hacer la llamada en cuestión. Si no está seguro de cuál es el componente, puede ser simplemente "la JVM" que necesita actualizar, actualizarse al menos a la última actualización/versión menor de la versión en la que se encuentre probablemente sea una buena idea.

En el pasado también he visto errores en el compilador JIT que se pueden resolver temporalmente diciéndole que no intente compilar el método particular en cuestión-- como recuerdo vagamente, en estos casos, el error de punto de acceso da alguna pista sobre qué método era (posiblemente solo el volcado de la pila de Java), pero no tengo un ejemplo a mano para recordar los detalles.

Cuestiones relacionadas