java - log - solaris thread dump
Dump dump programmatically/JDI(Java Debugger Interface) (4)
Me gusta generar un volcado de subprocesos programáticamente. Aprendí que hay básicamente dos formas de hacerlo:
- Utilice la "Interfaz de herramienta de máquina virtual de Java" JVM-TI
- Utilice la JDI "Interfaz de depurador Java abstraída" más alta
Para la JVM-TI pude encontrar información útil, pero tendría que escribir una JNI-DLL que, al menos por el momento, quisiera evitar. Con JDI puedo usar Java y parece que puedo usarlo desde dentro de la aplicación. Pero no pude encontrar algún tipo de tutorial o HOWTO para ello. La única documentación que pude encontrar, fueron los Java-Docs http://java.sun.com/j2se/1.5.0/docs/guide/jpda/jdi/ que no es muy útil, porque no me muestra cómo usar esta clase
Entonces, ¿alguien sabe de un buen tutorial / libro que pueda leer?
Thx por cualquier ayuda!
¿Consideraste la alternativa remota? Es decir, VisualVM
jps y jstack también son herramientas útiles incluidas en JDK 5, que proporcionan un método de línea de comando rápido para obtener trazas de pila de todos los hilos actuales.
Este artículo sugiere que JDI también se usa como una herramienta remota .
Así que no estoy seguro de que pueda desencadenar un volcado de hilo dentro de su propio programa, sino que encuentra una forma de enviarse una señal SIGQUIT (kill -3) en plataformas Unix, o presione la tecla Ctrl- en Unix o Ctrl-Break en plataformas Windows.
Además, JDI no estaba destinado a ser utilizado para depurar el mismo proceso en el que se ejecuta el cliente JDI . Todavía este hilo con el que acabo de vincular es el más cercano que he encontrado para usar JDI en el mismo programa.
Hay una tercera forma: Thread.getAllStackTraces ()
http://java.sun.com/javase/6/docs/api/java/lang/Thread.html#getAllStackTraces ()
Esto es mucho más fácil que la interfaz del depurador ...
Thread.getAllStackTraces () solo descarga el seguimiento de ejecución de todos los hilos, pero no proporciona la información de los bloqueos de objeto que se han obtenido mediante un hilo en particular o el bloqueo en el que un hilo en particular ha estado esperando. Básicamente, no seremos capaces de bloquear los bloqueos con esto.
Puede obtener casi toda la información de Thread que necesita, incluidos los deadlocks de http://java.sun.com/javase/6/docs/api/java/lang/management/ThreadMXBean.html