2012-04-18 13 views
5

Tengo un problema de rendimiento (Hi-CPU) en mi aplicación de servidor. Pero el problema solo aparece cuando el servidor ha estado funcionando durante mucho tiempo (una semana en promedio). Traté de usar el generador de perfiles integrado de Netbeans para diagnosticar el problema, pero después de funcionar durante unas horas, simplemente deja de responder.¿Hay un registrador de rendimiento o perfilador de Java a largo plazo?

¿Hay alguna manera de realizar una supervisión a largo plazo de la aplicación? Gracias.

ACTUALIZACIÓN: Esto no es una aplicación web

Respuesta

4

Usted debe echar un vistazo a Visual VM si no has hecho ya (si estás en JDK 6 Update 7 o superior). Estoy seguro de que será bastante reconfortante ya que es una "adaptación" del analizador de Netbeans en el núcleo de Java.

0

No sé mucho sobre las herramientas de creación de perfiles, así que no voy a recomendar una herramienta de creación de perfiles.

En cambio, lo que yo haría es usar AspectJ para inyectar instrucciones de registro (Log4j) en mi código. Si conoce ciertas áreas que sabe que quiere monitorizar, simplemente inyecte el registro en esos puntos específicos. De lo contrario, si quieres ver todo, puedes generalizar tus puntos e inyectarlos por todas partes.

Recoge los registros durante una semana y luego busca lo que podría estar comportándose 'irregularmente'. Estos archivos de registro, probablemente será bastante largo, dependiendo de lo que decida iniciar una sesión, por lo que puede que tenga que utilizar algún archivo de análisis para recoger información como:

  • # de llamadas de cada método
  • tiempo entre ciertas llamadas a métodos
  • estoy seguro de que puede pensar en otros basados ​​en el conocimiento de las condiciones de la instalación

comparar estos números desde el comienzo de la semana con aquellas en las que las inmersiones de rendimiento. Si obtiene éxitos de rendimiento notables, entonces me imagino que estos se reflejarán obviamente en los archivos de registro de esta naturaleza.

Esto puede ser un poco más trabajo que ejecutar una herramienta de generación de perfiles fuera de la caja, pero es bastante flexible y puede ser una buena experiencia de aprendizaje si no has hecho mucho con AspectJ anteriormente.

0

Hay una oferta comercial, que podría considerar DynaTrace, de Compuware. No trabajo ni he trabajado para Compuware, pero mi organización actual está considerando utilizar Dynatrace en nuestro entorno de producción.

Dependiendo del tipo de aplicación Java que esté ejecutando, ya sea una instalación de escritorio o basada en servidor, agregaría un jar al classpath (además de agregar un dispositivo de red a su red). La ejecución de la aplicación provocaría que los datos de instrumentación se envíen a los servidores de Dynatrace, donde puede recuperarlos, e incluso rastrear las rutas de usuario individuales y las transacciones a través de todo el sistema (independientemente de la tecnología utilizada).

Dynatrace es algo que me imagino que dejaste funcionando en todo momento, en lugar de solo cuando querías diagnosticar un problema en particular.Además, Dynatrace no es barato, probablemente esté buscando un costo de 5 cifras por servidor, sin embargo, por lo que he visto, parece funcionar casi como un depurador permanentemente ejecutado, pero sin demasiada penalización de rendimiento (< 5%).

No sé exactamente qué tipo de aplicación está ejecutando, pero la nuestra es una aplicación web basada en Java EE, que interactúa con algunos de nuestros servidores de servicios de fondo.

HTH

1

que escribí una herramienta de registrador de rendimiento que las muestras métricas tales como la CPU, la memoria y las discusiones contar y registros ellos usando log4j. Al comparar los registros de rendimiento con los registros de la aplicación, puede detectar fácilmente los patrones de rendimiento y perfilar su aplicación. ¡Disfrutar!

Performance-Logger

Cuestiones relacionadas