2010-12-04 6 views
7

me gustaría realizar un seguimiento de cuánto tiempo se gasta en GC y cuánta memoria se ha recogido, pero no mediante el análisis de los registros de GC (es decir, el análisis de lo que me dieron de -XX:. + PrintGCWhatever).notificación programático de eventos de recolección de JVM

descubrí que puedo usar ManagementFactory de Sun para obtener una GarbageCollectorMXBean que me puede dar alguna información de la memoria que contiene objeto GCInfo pero no tengo ninguna garantía de que pueda recoger todos los GC a través de este medio.

¿Alguien sabe de una manera de hacer esto en código?

Respuesta

4

GarbageCollectorMXBean es el mejor que he podido encontrar en la JVM de Sun. En mi experiencia, en realidad se acerca bastante a lo que estás pidiendo.

me imagino que podría haber un hilo dedicado que se despertaba de vez en cuando para obtener las estadísticas de GC. Esto agregaría un cierto determinismo a cuando se recopilan las estadísticas.

+0

Eso es lo que encontré. Pero no estoy seguro del comportamiento de GCMXbean. El documento para getGCInfo() dice que "devuelve el GCInfo más reciente", pero no que devuelve * all * GCInfo. Este puede ser el caso y antes de tratar de resolver esto por mí mismo, me interesaría saber si alguien sabe la respuesta. – insitu

+1

Por cierto, encontré este enlace http://robertmaldon.blogspot.com/2007/09/more-human-friendly-java-gc-timestamps.html que se acerca bastante a lo que estoy buscando, pero no exactamente. – insitu

0

Dada la variedad de herramientas para obtener esta información, es mejor usar los análisis de su comportamiento GC y optimizar para ello. p.ej. usando un perfilador de memoria.

El problema que tiene es que la información no es muy útil a menos que apunta a una solución a un problema. (Que luego puede corregir)

+3

No estoy de acuerdo. Como es habitual, recopilo estadísticas de GC desde mis aplicaciones de servidor (que tienden a ser sensibles a la latencia, por lo que GC es un gran problema.) Esto alerta al hecho de que ** hay ** un problema, por ejemplo cuando el usa cambios de patrones ** Descubrir y corregir ** el problema, por supuesto, requiere diferentes herramientas. – NPE

+0

Lo que intento lograr es algo que utilizo desde dentro de Java para reducir la complejidad de la configuración/análisis/análisis. jstat y sus amigos son geniales, y existen muchas herramientas de terceros (la mayoría de las cuales no conozco) que son geniales, pero usarlas significa iniciar un proceso, analizar algunos resultados. Dado que toda la información proviene de la JVM en la que me estoy postulando, se podría pensar que hay una forma de acceder a esta información desde dentro de la JVM. – insitu

Cuestiones relacionadas