Los cuellos de botella del rendimiento pueden identificarse rápidamente utilizando las vistas estadísticas. Este tema describe un caso práctico en el que tratamos de mejorar el tiempo de ejecución. La vista Estadísticas de paquete es un buen punto de partida porque identifica los paquetes responsables de la lentitud de la ejecución. Desde aquí, buscaremos la clase o el método responsables del pobre rendimiento de la ejecución.
Al lanzar la aplicación que se desea perfilar, habilitamos la recogida de información de flujo de ejecución. (Seleccione la opción de perfilado, Mi aplicación es muy lenta y, en las opciones de Detalles, seleccione Mostrar detalles gráficos del flujo de la ejecución.)
La vista Estadísticas de paquete, tiene el aspecto siguiente cuando se abre:
Esta vista muestra estadísticas de las distintas clases, agrupadas por los paquetes que las
contienen. La vista puede personalizarse para visualizar cualquier tipo de datos
estadísticos, como por ejemplo, la asignación de memoria o las estadísticas basadas en tiempo.
En nuestro caso, vamos a asegurarnos de que las columnas relacionadas con el tiempo sean
visibles porque contienen la información que necesitamos. (Pulse con el botón derecho, seleccione
Elegir columnas y establezca la visibilidad de estas columnas.) También
ordenaremos los paquetes mediante la columna de Tiempo base de ejecución. Tal como puede ver
más arriba, el paquete com.ibm.ws.ejbpersistence.dataaccess es el "punto caliente" de la
ejecución, y dentro de este paquete, DataAccessRequestImpl e la clase responsable de la
ralentización.
Ahora podemos ver claramente que el método execute es el responsable del bajo rendimiento de la clase DataAccessRequestImpl; su tiempo de ejecución es muy alto comparado con el tiempo invertido en el otro método, executeOneRowFBPK.
Observemos antentamente la vista Estadísticas de clase. Hay un punto realmente interesante que merece la pena comentar: la clase java.text.NumberFormat está junto a la lista de clases responsables de la lentitud de la ejecución. En concreto, el tiempo transcurrido en esa clase se dedica a java.text.NumberFormat.getCurrencyInstance(). Esto puede darle una idea de lo que cuesta utilizar algunos métodos aparentemente simples. Incluso aunque NumberFormat.getCurrencyInstance() sea una API simple, el hecho de llamarla muchas veces puede tener un gran impacto sobre el rendimiento general de la aplicación.
Ahora vamos a las invocaciones de método para el método DataAccessRequestImpl.execute(). Una característica poderosa de la herramienta de perfilado es la representación gráfica de la ejecución de la aplicación, que permite ver la ejecución del método en el nivel de invocación del mismo. Esta vista es útil porque puede ver el patrón de ejecución y las diferencias entre invocaciones en el mismo método. Aquí está la vista Invocación de método para ilustrar la invocación del método DataAccessRequestImpl.execute().Desde este gráfico puede ver lo que ha llamado esta invocación en la pila de la ejecución
o saltar al código fuente del método. También puede ver el tiempo transcurrido haciendo flotar
el cursor sobre cualquier barra.
La tabla Invocación de método que se muestra a continuación muestra las mismas invocaciones de
método pero en forma de tabla. Es interesante advertir que para la primera invocación de método, el
tiempo de ejecución (vea la columna Tiempo acumulativo) es muy alto en comparación con posteriores
invocaciones de método.
Así, finalmente, encontramos que el método responsable de que el tiempo de ejecución sea largo en general, es la primer invocación del método OnlineItembean.FindByValue.
Conceptos relacionados
Visión general de la herramienta de perfilado
Tareas relacionadas
Perfilar una aplicación
Lanzar o conectar un proceso Java
(C) Copyright IBM Corporation 2000, 2003. Reservados todos los derechos.