Pregunta

Me doy cuenta de que las preguntas similares se han preguntado acerca de esto antes aquí en la SO, pero permítanme describir exactamente lo que tiene que hacer:

Tengo un conjunto de pruebas que se ejecutan una aplicación java línea de comandos y me gustaría añadir perfiles de memoria para ellos. Una opción que veo sería añadir código (posiblemente usando herramientas / partido bibliotecas 3ª) a mi solicitud que proporcionaría una instantánea de memoria. Otra opción sería utilizar una herramienta de terceros que administra / instrumentos mi aplicación y la JVM para mí (e idealmente no me exige que cambie el código). Estoy pensando en algo así como Valgrind pero para Java. También de código abierto, si es posible.

Lo que realmente me gustaría hacer es configurar las pruebas de memoria para que mi uso de la memoria está siendo monitoreado a intervalos regulares, digamos cada segundo, y arrojó a un archivo de texto. Esa manera de que fuera capaz de ver si el uso de la memoria oscila / aumenta / disminuye con el tiempo. También voy a ser capaz de calcular el máximo y picos min.

Alguien aquí hecho algo como esto?

Gracias de antemano.

¿Fue útil?

Solución

Con algo así como JProfiler todo lo que tiene que hacer es añadir algunos parámetros de la JVM. Utiliza JVMTI.

Creo que deberías estar leyendo sobre perfiladores y exactamente lo que puede hacer por usted. También sugiero leer sobre JVMTI.

La interfaz de la herramienta JVMTM (JVM TI) es una nueva interfaz de programación nativo para el uso de herramientas. Proporciona tanto una forma de inspeccionar el estado y controlar la ejecución de las aplicaciones que se ejecutan en la máquina virtual de Java (JVM). JVM TI apoya toda la amplitud de las herramientas que necesitan tener acceso a otro JVM, incluyendo pero no limitado a:. Perfilado, la depuración, la vigilancia, el análisis de rosca y herramientas de análisis de cobertura

Nota: JVM TI sustituye a la máquina virtual Java Profiler Interface (JVMPI) y la máquina virtual Java interfaz de depuración (JVMDI). JVMPI y JVMDI serán eliminados en la próxima versión de J2SETM.

Otros consejos

YourKit también tiene un muy buen perfilador

¿Ha comprobado

VisualVM y Eclipse-Calixto ?

Un buen lugar para comenzar es ver si su JVM soporta "java -Xrunhprof" ya que esto puede generar montón de información de perfiles sin hacer que su escenario más complejo.

http://docs.oracle.com/ JavaSE / 7 / docs / notas técnicas / samples / hprof.html

Usted puede encontrar que suficiente para que usted para el arranque.

Varios de perfiles tales como YourKit tener la API para rastrear las asignaciones de memoria. Otra opción aquí están las herramientas, como el control jxinsight  o Glassbox o jamon

Para analizar montón vuelca el Eclipse Memory Analyzer es la mejor herramienta que puede obtener. Es de código libre y abierto, por lo que se puede automatizar el análisis del montón vuelca tanto como usted desee.

I desarrollar en Eclipse, pero tengo Netbeans en torno a usar su excelente Profiler. Está limitada en comparación con algunos comerciales, pero todavía lo suficientemente bueno para la detección de la mayoría de los cuellos de botella

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

JROCKIt_HOME\bin\jrcmd <pid> print_object_summary

y se 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
 ...

Además de las respuestas anteriores también he disfrutado el uso de perfiles hace un par de años. No sé si eso ayuda.

Yo te recomiendo dynaTrace edición de producción. herramienta increíble para perfil de aplicación de memoria. Baja sobrecarga y 100% de las transacciones ejecutadas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top