Pregunta

¿Es posible obtener un volcado de subprocesos de una aplicación Java Web Start?Y si es así, ¿cómo?

Sería bueno si hubiera una solución simple que permitiera a una persona que no es desarrollador (cliente) crear un volcado de subprocesos.Alternativamente, ¿es posible crear un volcado de subprocesos mediante programación?

En Java Web Start Console puedo obtener una lista de subprocesos presionando 't' pero los seguimientos de pila no están incluidos.

Si las respuestas requieren ciertas versiones de Java, dígalo.

¿Fue útil?

Solución

En la consola, presione V en lugar de T:

t:   dump thread list
v:   dump thread stack

Esto funciona bajo JDK6.No sé de los demás.

Como alternativa, en JDK5 (y posiblemente antes) puede enviar un seguimiento de pila completo de todos los subprocesos al estándar:

En Windows: escriba Ctrl-break en la consola Java.

Bajo Unix: kill -3 <java_process_id>(p.ej.matar -3 5555).Esto NO matará tu aplicación.

Otra cosa:Como dicen otros, puedes obtener las pilas mediante programación a través del Thread clase pero cuidado con Thread.getAllStackTraces() antes de JDK6 ya que hay una pérdida de memoria.

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6434648

Saludos,

escocés

Otros consejos

Los JDK recientes (lamentablemente no JRE) incluyen herramientas como jstack que hace ese tipo de cosas.Las JVM de la versión 5 incluyen extensiones JMX para obtener volcados de subprocesos, estadísticas de memoria y mucho más.Todas las aplicaciones Java, incluidas las aplicaciones de inicio web, tienen esta funcionalidad disponible.

Necesitará tener instalado el JDK o escribir un cliente JMX que haga lo mismo.Echa un vistazo a http://java.sun.com/javase/6/docs/technotes/guides/management/ para obtener más información.

Desde 1.5 puedes usar Thread.getAllStackTraces() conseguir un Map para iterar.

El resultado ideal sería el producido a partir de Ctrl-\ (o Ctrl-Break o similar), pero no parece haber una forma documentada de producirlo.Si está dispuesto a limitarse a la JVM de Sun (o usar la reflexión, supongo), podría investigar el sun.* paquetes y ver si aparece algo interesante.

Intentar

StackTraceElement[] stack = Thread.currentThread().getStackTrace();

Luego, puede iterar sobre la colección para mostrar los x elementos de la pila principales que le interesan.

Desde Java 5 tienes el método getStackTrace() de la clase Thread.Para versiones anteriores puedes hacer:

Thread.currentThread().dumpStack();

Esto imprimirá el seguimiento de la pila en System.out

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top