Uno de mis componentes está tardando demasiado tiempo en ejecutarse. Llama a muchos servicios que a su vez llaman a muchos métodos de dao. Ahora, ¿hay alguna manera de aprovechar el tiempo de cada método al que llama?
No quiero escribir System.currentmillis
antes y después de cada método para calcular el tiempo ya que hay demasiados métodos.
Creo que es posible que necesite usar interceptores o cualquier analista puede hacerlo. No estoy seguro, por favor ayuda.¿Cómo saber qué método está tomando mucho tiempo?
Respuesta
Utilice jvisualvm
que debería venir con JDK (si no recuerdo mal). Es una GUI para su JVM, y tiene funciones realmente agradables. Echa un vistazo a su features hay algunas capturas de pantalla, así ...
Y puede seguir estos pasos para integrarlo como lanzador en Eclipse Steps to integrate in eclipse
estoy usando esto, pero o bien no puedo encontrar dónde muestra el tiempo empleado por el método o no muestra la hora en absoluto. –
Cuando está ejecutando una aplicación, debe activar la CPU y el perfilador/muestreador de memoria. Entonces verás activamente los puntos calientes. Una vez que finaliza la ejecución, elabora un informe muy claro en el que puede supervisar las diferentes partes del software que se obstruye. (ver: http://visualvm.java.net/images/profiler.jpg) Espero que eso ayude. – posdef
Puede utilizar el Analizador de Java en NetBeans IDE.
un vistazo aquí: http://netbeans.org/features/java/profiler.html
El Java VisualVM es otra alternativa: http://java.net/projects/visualvm/content/. Puede adjuntarlo a cualquier programa Java en ejecución, incluidos los que inicie a través de Eclipse.
No lo veo como medir el tiempo para encontrar el problema.
Usa su lentitud para exponerlo. Simplemente use el mismo método que usaría si fuera un ciclo infinito.
Es decir, pause algunas veces mientras está siendo lento, y cada vez inspeccione la pila de llamadas de cada hilo. Los métodos y las líneas de código culpables aparecerán en varias muestras. Compruebe el last paragraph of this post.
- 1. ResultSet - Cursor: rs.next() Tomando mucho tiempo
- 2. Agregando para crear la matriz de frecuencia tomando mucho tiempo
- 3. ¿Está definido por mucho tiempo?
- 4. ¿Cómo verificar cuánto tiempo está tomando la consulta MySQL?
- 5. ¿Por qué IIS7 tarda mucho tiempo?
- 6. simple consulta de actualización está tomando demasiado tiempo
- 7. ¿Por qué tarda mucho tiempo la tarea MSBuild ResolveProjectReferences?
- 8. ¿Cómo puedo saber qué proceso Linux está esperando?
- 9. Convertir de mucho tiempo postgres
- 10. Regex tomando un tiempo sorprendentemente largo
- 11. ¿Por qué las instantáneas de Windows tardan mucho tiempo?
- 12. Las llamadas WCF simples toman mucho tiempo
- 13. ¿Cómo saber qué elemento de arrastre está sobre qué elemento?
- 14. Eclipse tarda mucho tiempo para guardar web.xml
- 15. Cómo saber cuándo Windows está inactivo
- 16. ¿Por qué el diálogo UAC tarda mucho tiempo en mostrarse?
- 17. iPhone/iOS: ¿Cómo puedo saber qué localización está usando el teléfono en tiempo de ejecución?
- 18. UIActionSheet tarda mucho tiempo para responder
- 19. ¿El acceso a SharedPreferences consume mucho tiempo?
- 20. ¿Patrón efectivo para obtener información de progreso sobre un método que lleva mucho tiempo en WCF?
- 21. Ordenamiento MySQL Resultados lleva mucho tiempo
- 22. Python datetime.strptime() Comer mucho tiempo de CPU
- 23. ¿Cómo encontrar consultas de SQL Server que tomaron mucho tiempo?
- 24. ¿Cómo saber qué proceso está usando un archivo dado?
- 25. ¿Cómo se puede saber qué panel de Tmux está enfocado?
- 26. Cómo saber de qué manera se está desplazando UITableView
- 27. ¿Cómo puedo saber qué fuente está usando Chrome?
- 28. ¿Cómo saber qué proceso (stat: T) está conectado por gdb?
- 29. ¿Cómo puedo saber qué versión de Java está usando Tomcat6?
- 30. ¿Cómo saber qué está haciendo Eclipse en el entorno?
creo que la mayoría de los entornos de desarrollo tienen una funcionalidad de perfiles incorporado. – gigadot
@gigadot estoy usando eclipse –
Lamentablemente soy fan de Netbeans pero quiero agregar que los tiempos medidos por Profiler solo le dan la estimación relativa. No es el tiempo real pasado en el método. El generador de perfiles debe adherirse al método y eso causa la sobrecarga adicional. – gigadot