2010-08-19 18 views
5

Ejecuto carga contra Tomcat 6 que se ejecuta en Java 6. Quiero recopilar un heapdump del montón de Java mientras el servidor Tomcat está bajo carga. Normalmente uso jmap -dump para recolectar mis heapdumps.Recopilación de heapdump de Java bajo carga

Sin embargo, cuando trato de hacer esto cuando Tomcat maneja una carga alta encuentro que la colección heapdump falla.

¿Es jmap la mejor herramienta para recolectar un volcado de pila de un proceso bajo carga? ¿Cuáles son las causas posibles que causarían que jmap no recolectara un heapdump?

Si jmap no es la mejor herramienta, ¿qué es mejor?

Es totalmente aceptable para mí para jmap (u otra herramienta) detener el mundo dentro del proceso de Java mientras se realiza el volcado del montón.

+1

¿Ha intentado conectar VisualVM a la VM y crear una HeapDump con eso? –

+0

Esto no es ideal para mí ya que mi Tomcat se ejecuta en un servidor Linux remoto. VisualVM incluye soporte para vuelcos de almacenamiento dinámico remotos pero esto requiere que se abra un puerto JMX cuando se inicia la JVM. – mchr

+0

http://stackoverflow.com/questions/20235802/ways-how-to-get-heap-dump-from-running-tomcat-7 tiene respuestas más detalladas. – Vadzim

Respuesta

2

He encontrado que ejecutar Tomcat con un puerto JMX me permite tomar un volcado de almacenamiento remoto usando visualvm. Esto fue exitoso cuando jmap falló.

2

¿Es jmap la mejor herramienta para recolectar un volcado dinámico de un proceso bajo carga?

Creo que: No, no lo es. From this link:

NOTA - Esta utilidad no es compatible y puede o no estar disponibles en el futuro versiones del JDK.

+0

¿Me puede recomendar una alternativa? – mchr

+0

No, nunca tuve que lidiar con volcados de heap, pero busqué información de jmap, solo curiosidad, obtener suerte. – sourcerebels

2

También he encontrado jmap puede bastante temperamental. Si tiene problemas:

  • Inténtelo de nuevo. A menudo se las arregla para obtener un volcado del montón después de un par de intentos si primero no
  • Utilice la opción -F
  • Añadir -XX: + HeapDumpOnOutOfMemoryError como una configuración estándar para tomar proactivamente montón vertederos cuando un error OOM se lanza
  • Ejecute Tomcat de forma interactiva y agregue el volcado del montón en la opción ctrl-break. Esto también le proporciona un volcado de hilo, algo que probablemente necesite
  • Si su tamaño de pila es especialmente grande y tiene una condición repetible, reduzca temporalmente el tamaño de su pila. Hace que el archivo resultante sea mucho más fácil de manejar, toma menos tiempo y es más probable que tenga éxito
+0

Gracias por esta respuesta: intentaré volver a intentar jmap la próxima vez. He publicado mi propia respuesta sobre el uso de visualvm. – mchr

Cuestiones relacionadas