2009-04-16 9 views
22

Soy consciente de que preguntas similares se han preguntado acerca de esto antes aquí en la SO, pero permítanme describir exactamente lo que tengo que hacer:¿La mejor manera de usar la memoria de perfil en una aplicación Java?

Tengo un conjunto de pruebas que se ejecutan una aplicación de línea de comandos java y me gustaría para agregar perfiles de memoria a ellos. Una opción que veo sería agregar código (posiblemente usando herramientas/bibliotecas de terceros) a mi aplicación que proporcionaría una instantánea de memoria. Otra opción sería usar una herramienta de terceros que administre/instrumente mi aplicación y la JVM (y, idealmente, no requiere que cambie mi código). Estoy pensando en algo como Valgrind pero para Java. También fuente abierta si es posible.

Lo que realmente me gustaría hacer es configurar las pruebas de memoria para que el uso de mi memoria se supervise a intervalos regulares, digamos cada segundo, y se vierta en un archivo de texto. De esa forma, podría ver si el uso de la memoria oscila/aumenta/disminuye con el tiempo. También podré calcular los picos máximo y mínimo.

¿Alguien ha hecho algo como esto?

Gracias de antemano.

Respuesta

16

Con algo como JProfiler, todo lo que necesita hacer es agregar ciertos parámetros a la JVM. Utiliza JVMTI.

Creo que deberías leer sobre los perfiladores y qué pueden hacer por ti. También sugiero leer sobre JVMTI.

La interfaz de herramientas JVMTM (JVM TI) es una nueva interfaz de programación nativa para el uso de herramientas. Proporciona una forma de inspeccionar el estado y controlar la ejecución de las aplicaciones que se ejecutan en la máquina virtual Java (JVM). JVM TI es compatible con toda la gama de herramientas que necesitan acceso al estado de JVM, incluidas, entre otras, las herramientas de análisis de perfiles, depuración, monitoreo, análisis de hilos y cobertura.

Nota: JVM TI reemplaza a Java Virtual Machine Profiler Interface (JVMP) y Java Virtual Machine Debug Interface (JVMDI). JVMPI y JVMDI se eliminarán en la próxima versión principal de J2SETM.

6

Yourkit también tiene un muy buen perfilador

2

como yourkit tener API Varios de perfiladores de rastreo de las asignaciones de memoria. Otra opción aquí están las herramientas de supervisión, tales como jxinsight o glassbox o jamon

Para analizar montón vuelca el Eclipse Memory Analyzer es la mejor herramienta que puede obtener. Es gratuito y de código abierto, por lo que puede automatizar el análisis de los volcados de almacenamiento dinámico tanto como desee.

1

Además de las respuestas anteriores, también disfruté usando Profiler hace un par de años. No sé si eso ayuda.

2

Me desarrollo en Eclipse pero tengo Netbeans para utilizar su excelente Profiler. Es limitado en comparación con algunos comerciales, pero sigue siendo lo suficientemente bueno para detectar la mayoría de los cuellos de botella

+0

El analizador de redes ha sido puesto en el analizador VisualVM con Java 6 u10. ¡Es muy bonito! –

2

Puede usar jrcmd que es una utilidad de línea de comandos que viene con JRockit JVM. Si conoce el pid del proceso de Java sólo se puede hacer:

JROCKIt_HOME\bin\jrcmd <pid> print_object_summary 

y que le dará:

31.8% 3198k 41907 -137k [C 
11.9% 1196k  300  +0k [B 
11.4% 1151k 49118  +6k java/lang/String 
6.1% 612k  5604  +0k java/lang/Class 
4.3% 431k  2388  +0k [I 
3.5% 353k 15097  +0k java/util/HashMap$Entry 
... 
+0

obtengo: no se puede abrir el archivo de socket: el proceso de destino no responde o HotSpot VM no se carga cuando intento esto – Zubair

1

me recomiendan dynaTrace edición de producción. Herramienta increíble para la aplicación de memoria de perfil. Bajos gastos generales y 100% de las transacciones ejecutadas.

Cuestiones relacionadas