通过使用统计视图可以容易地标识性能瓶颈。本主题描述了一个寻求改进执行时间的方案。“包统计信息”视图是一个很好的起点,因为它标识了导致执行时间较慢的包。从这里开始,我们将深入研究并查找导致执行性能较差的类或方法。
当启动要进行概要分析的应用程序时,我们启用执行流信息收集。(选择概要分析选项我的应用程序运行速度太慢,然后从“详细信息”选项中,选择显示执行流图形详细信息。)
当打开“包统计信息”视图时,它看起来类似于下图:
此视图显示不同类的统计信息,这些类是按包分组的。可以定制该视图来显示任何类型的统计数据,例如,基于内存分配或时间的统计信息。在该示例中,请确保与时间相关的列可视,因为它们包含我们需要的信息。(右键单击并选择选择列,然后将这些列设置为可视。我们还使用执行“基本时间”列来对包排序。正如您在上面所看到的那样,com.ibm.ws.ejbpersistence.dataaccess 包是执行“热点”,并且在此包中,DataAccessRequestImpl 是导致执行时间较慢的类。
现在,我们可以清楚地看到 execute 方法是导致 DataAccessRequestImpl 类的性能较差的方法;它的执行时间远大于花费在另一方法 executeOneRowFBPK 上的时间。
让我们仔细查看“类统计信息”视图。这里有一个有趣的问题值得我们注意:java.text.NumberFormat 类在导致执行时间较慢的类列表上排名第二。特别是,java.text.NumberFormat.getCurrencyInstance() 占用了花费在该类上的时间。这可以让您明白使用一些表面上看来很简单的方法,也会花费很多时间。即使 NumberFormat.getCurrencyInstance() 看起来是一个简单的 API,多次调用它也会对应用程序的总体性能有很大影响。
现在,我们来讨论 DataAccessRequestImpl.execute() 方法的方法调用。概要分析工具的一个强大功能是应用程序执行的图形表示法,它使您可以在方法调用级别查看方法执行情况。此视图很有用,因为您可以看到执行模式以及同一方法的各次调用之间的差别。下面是用来说明调用 DataAccessRequestImpl.execute() 方法的“方法调用”视图。从此图形中,您可以看到在执行堆栈中哪些对象调用了此调用,您也可以跳转至方法的源代码。将光标悬浮在任何条上就可以看到所花费的时间。
下面的“方法调用”表显示了相同的方法调用,但这一次是以列表形式显示的。值得注意的是,对于第一次方法调用,其执行时间(请参阅“累积时间”列)比起后面的各次方法调用来说多得多。
这样,最后我们发现了导致总体执行时间较长的方法正是 OnlineItembean.FindByValue 方法的第一次调用。
相关概念
概要分析工具概述
相关任务
对应用程序进行概要分析
启动或连接 Java 进程
(C) Copyright IBM Corporation 2000, 2003. All Rights Reserved.