2010-05-28 12 views
13

Solo me pregunto cuáles son las diversas herramientas & que existen para depurar problemas de producción en aplicaciones Java. Me gusta,Herramientas disponibles para depurar problemas de producción en aplicaciones Java

  • ¿Cuáles son las formas y herramientas para tomar volcados de hilo?
  • ¿Cuáles son las formas y herramientas para tomar volcados de almacenamiento dinámico?
  • ¿Cuáles son las herramientas para analizar los vertederos anteriores?

(Supuesto todos están en entorno Linux/Unix)

+1

He editado su publicación, ya que estoy bastante seguro de que estaba interesado en la memoria _dumps_, no en la memoria _dumbs_ ;-) –

+1

¿Cuál es la diferencia entre un volcado de memoria y un volcado de pila para usted? –

+0

Gracias, muchachos, por señalar todos los errores tipográficos. He corregido mis preguntas. –

Respuesta

7

¿Cuáles son las formas y herramientas para tomar volcados de hilo?

Para un volcado de hilo, puede utilizar JConsole, VisualVM o, más simplemente, enviar un QUIT señal para el proceso de destino

kill -QUIT <pid> 

o

kill -3 <pid> 

Desde Java 5, hay también es jstack, que es independiente de la plataforma y tiene una buena opción -m para imprimir tramas Java y nativas (modo mixto).

¿Cuáles son las formas y herramientas para tomar volcados de almacenamiento dinámico?

con Sun VM, jmap, Sun JConsole, Sun VisualVM, SAP JVMMon. Para máquinas virtuales de IBM, marque this page. De hecho, el wiki de Eclipse MAT tiene una sección agradable de Getting a Heap Dump que resume todas las opciones.

¿Cuáles son las herramientas para analizar los vertederos anteriores?

Para hilo vertederos utilizo TDA - Thread Dump Analyzer (por Sun JDK) y IBM Thread and Monitor Dump Analyzer (para IBM JDK). Samurai también es muy bueno (funciona como tail -f y recupera los volcados de subprocesos de su std/stderr automáticamente, también puede leer los registros "-verbose: gc") y se ha probado contra las máquinas virtuales de Apple, BEA, HP, Sun y IBM (también puede leer el javacore de IBM).

Para vuelcos de almacenamiento dinámico, utilizo VisualVM (por Sun JDK) o IBM Heap Dump Analyzer (sólo para IBM JDK) o el über increíble Eclipse MAT en función de mis necesidades. El último es capaz de trabajar con volcados de pila binarios HPROF (producidos por Sun, HP, SAP, etc ... JVM), volcados de sistema de IBM (después de preprocesarlos) y volcados de pila (PHD) portátiles IBM de una variedad de IBM plataformas).

+0

¡Gracias! Iré a través de estos enlaces para obtener más información ... –

1

Suponiendo JDK 6, echar un vistazo al siguiente artículo para obtener los vertederos de rosca de un programa en ejecución:

http://java.sun.com/developer/technicalArticles/Programming/Stacktrace/

Usted puede utilizar jhat para hacer análisis montón:

http://java.sun.com/javase/6/docs/technotes/tools/share/jhat.html

Si usted quiere hacer volcados de memoria echar un vistazo a jmap:

http://java.sun.com/javase/6/docs/technotes/tools/share/jmap.html

Como alternativa, si necesita hacer algún análisis más en el análisis de profundidad a un generador de perfiles tales como YourKit:

http://www.yourkit.com/

-1

y creo que la mejor manera de depuración de aplicaciones Java en el entorno de producción no es volcado y así sucesivamente, pero una buena gerencia de registros.

Ver por ejemplo slf4j.

+0

¿Eh? Los volcados de subprocesos y los volcados de Heap son increíblemente valiosos y, aunque los registros son muy útiles también, no te dirán qué hilos (incluido el del servidor) estaban haciendo o qué estaba en la memoria cuando obtuviste este OOM. No puede hacer análisis de problemas graves solo con registros (especialmente si se refiere a registros de aplicaciones). Los registros –

+0

se usan principalmente para obtener respuestas a preguntas que sabía que haría más adelante. Ahora, ¿qué pasa con las preguntas que no pensaste entonces? –

1

No hay un conjunto de herramientas estándar para las JVM. Estos dependen del proveedor, y debe consultar la documentación.

Para Sun Java 6 el programa VisualVM es muy, muy útil para obtener un perfil rápido y un seguimiento de la pila de un programa en ejecución.

1

La herramienta que utilizo para este tipo de depuración de un JVM de Sun son

  • jstack para tomar un vertedero de hilo
  • jmap tomar un volcado de memoria/montón, o histograma
  • eclipse mat para post análisis del volcado del montón producido por jmap
  • visual vm tiene un buen interfaz de usuario para el análisis en vivo de la vm (también puede tomar volcados de montón y de subprocesos)
0

Para depurar problemas con las asignaciones de memoria, InMemProfiler se puede utilizar en la línea de comandos. Las asignaciones en vivo frente a las recolectadas se pueden rastrear y los objetos recopilados se pueden dividir en segmentos en función de sus tiempos de vida.

En modo de seguimiento esta herramienta se puede utilizar para identify the source of memory allocations.

Cuestiones relacionadas