studio reales proyectos para introducción incluye herramientas fuente desarrollo código crear con avanzado aplicaciones java profiling

reales - Si tiene una aplicación Java que consume CPU cuando no está haciendo nada, ¿cómo determina qué está haciendo?



introducción a android studio incluye proyectos reales y el código fuente pdf (8)

Estoy llamando a Java API de un proveedor, y en algunos servidores parece que la JVM entra en un bucle de sondeo de baja prioridad después de iniciar sesión en la API (CPU al 100% de uso). La misma aplicación en otros servidores no muestra este comportamiento. Esto sucede en WebSphere y Tomcat. El entorno es difícil de configurar, por lo que es difícil intentar hacer algo como crear perfiles dentro de Eclipse.

¿Hay alguna forma de crear un perfil (u otro método de inspección) de una aplicación Java existente que se ejecute en Tomcat para averiguar qué métodos se están ejecutando mientras se encuentra en este tipo de estado de espera? La aplicación solo está ejecutando un método cuando se pone en este estado (método del proveedor). El proveedor no puede replicar el comportamiento (por supuesto).

Actualizar:

Utilizando JConsole, pude determinar quién estaba ejecutando y qué estaban haciendo. Tardé unas horas en descubrir por qué lo estaba haciendo. El problema terminó siendo que el jar de la API del proveedor que se estaba utilizando no coincidía exactamente con la configuración de la base de datos que estaba usando. Estaba predeterminado tener el seguimiento y la supervisión del rendimiento habilitados en los servidores que tenían una ligera falta de coincidencia en la configuración. Usé un frasco diferente y todo está bien.

Así que gracias, Joshua, por tu respuesta. JConsole fue extremadamente fácil de configurar y usar para monitorear una aplicación existente.

@Cringe: hice algunos experimentos con algunas de las opciones que sugeriste. Tuve algunos problemas para configurar JProfiler, se ve bien (pero caro). En el futuro, seguí adelante y agregué el plugin Eclipse Profiler y revisaré los diferentes perfiles abiertos para comparar la funcionalidad.


Enfrentando el mismo problema, utilicé el perfilador YourKit . Su cargador no se activa a menos que realmente se conecte (aunque abre un puerto para escuchar las conexiones). El generador de perfiles tiene una buena "cantidad de tiempo invertida en cada método" mientras trabaja en su modo menos ofensivo.

Otra forma es detectar la carga de CPU (a través de JNI, por lo que necesitaría una biblioteca externa para esto) en un subproceso de "vigilancia" con la más alta prioridad y comenzar a registrar todos los subprocesos cuando la CPU es lo suficientemente alta durante un tiempo suficientemente largo. Puede encontrar este artículo enlightining.


Si es para fines profesionales y tienes dinero para gastar, intenta poner tus manos en JProfiler . Si solo quieres obtener algunas ideas, prueba el plugin Eclipse Profiler . Lo usé varias veces, pero no sé el estado actual.

También está disponible un nuevo proyecto (?) Del proyecto eclipse: http://www.eclipse.org/tptp/ (Ver este artículo ). Nunca lo usé, así que no puedo decir si vale la pena el esfuerzo.

También hay una muy buena lista de analizadores de código abierto disponibles en http://www.manageability.org/blog/stuff/open-source-profilers-for-java


Para mayor satisfacción: aunque mi empresa se normaliza más o menos en Eclipse, utilizamos Netbeans (de 6 en adelante) con su perfilador gratuito incluido a diario. Funciona mejor que el plugin TPTP de Eclipse (verificado por última vez hace 3 meses) y para nosotros elimina la necesidad de un perfilador comercial como JProfiler, que es excelente, pero que se vuelve cada vez más innecesario.


VisualVM debería ser el generador de perfiles de netbeans como independiente. ¡Probé el TPTP para eclipse pero visualVm parece una opción mucho más agradable!


Use un perfilador. Sí, cuestan dinero, y su uso en ocasiones puede ser un poco incómodo, pero te ofrecen mucha más evidencia real en lugar de conjeturas.

Los seres humanos son universalmente malos para adivinar dónde están los cuellos de botella en el rendimiento. Simplemente parece ser algo que nuestros cerebros no están diseñados para hacer muy bien. Puede parecer obvio, puede tener grandes ideas sobre cuál es el problema, pero el mundo real a menudo resulta estar haciendo algo diferente. Y optimizar la parte incorrecta del código significa, en el mejor de los casos, mucho trabajo para obtener un beneficio mínimo. Más a menudo hace las cosas más lentas, y algunas veces rompe las cosas por completo. Por lo tanto, antes de realizar cambios en aras de la optimización, siempre debe contar con evidencia real de un generador de perfiles u otra herramienta precisa.

Como se mencionó, tanto JProfiler como YourKit son bastante buenos y no prohibitivos. La última vez que miré, ambos tenían demos gratuitas también.


Si está utilizando Java 5 o posterior, puede conectarse a su aplicación utilizando jconsole para ver todos los subprocesos en ejecución. jstack también hará un volcado de pila. Creo que esto debería funcionar incluso dentro de un contenedor como Tomcat.

Ambas herramientas se incluyen con JDK5 y posterior (supongo que el proceso debe ser al menos Java 5, aunque podría estar equivocado)

Actualización: También vale la pena señalar que, a partir de la actualización 7 de JDK 1.6, ahora hay un generador de perfiles incluido llamado VisualVM que se puede iniciar con ''jvisualvm''. Parece que es un proyecto de java.net , por lo que la información adicional puede estar disponible en esa página. No he usado esto todavía, pero parece útil para un análisis más serio.

Espero que ayude


JRockit Mission Control Latency Analyzer.

El analizador de latencia que viene con JRockit le muestra lo que la JVM está "haciendo" cuando no está haciendo nada. En la última versión, puedes ver latencias para:

  • Java wait / blocked / sleep / estacionado.
  • Archivo de E / S
  • E / S de red
  • Asignación de memoria
  • Pausas de GC
  • Latencias JVM, p. Ej. Generación de código y carga de clase
  • Suspensión de hilo

La herramienta le dará el seguimiento de pila cuando se produjo la latencia. Puede ver los datos de latencia de muchas maneras diferentes (rastros agregados, como un histograma, en un gráfico de hilo, etc.). La herramienta también le permite ver transiciones entre hilos, por ejemplo, cuando un hilo notifica a otro.

analizador de latencia http://blogs.oracle.com/hirt/WindowsLiveWriter/The.0LatencyAnalyserMigratedfromtheoldBE_7246/latency_graph_2.png

La sobrecarga es insignificante y, a diferencia de muchas otras herramientas, puede usarse en un entorno de producción. Esta publicación de blog le brinda una breve introducción y el programa se puede descargar aquí .

¡Es gratis para usar para el desarrollo!


Si JConsole no se puede usar, puede

  • presione CTRL + BREAK debajo de Windows
  • enviar kill -3 <process id> en Linux

para obtener un volcado de subprocesos completo. Esto no afecta el rendimiento y siempre se puede ejecutar en producción.