选择 WebSphere J2EE 过滤器集阻止了代理收集与标准的 J2EE 包有关的数据。而我们想要收集的是与我们正在进行概要分析的应用程序有关的数据。为了达此目的,可以添加过滤器来包括 acme.* 包。单击 Add(上面打了圈),然后输入 Add filter 对话框中所示的值。单击 OK,然后选择 Next 以进行下一步操作。
一些来自您希望过滤掉的包中的数据会不合逻辑地出现在概要分析视图中。这是一个已知的问题。
各种概要分析选项(如图8所示)允许您进一步指定概要分析代理可以收集的性能数据的详细程度。选择适当的选项,然后单击 Next 以进行下一步操作。
图8. 指定概要分析选项
Profiler 现在配置完毕。单击 Finish。
在成功地完成了 Profiler 的配置过程之后,系统就启动 Profiling 透视图。已配置的概要分析代理会显示在 Profiling Monitor 中。单击 OK以进行下一步操作。
图9. Profiler 设置完毕
执行阶段
可以通过几个图形查看器和统计查看器来查看任何已收集的的性能数据。右键单击概要分析代理(如下所示),然后打开以下视图: Package Statistics、Class Statistics、Method Statistic 和 Object Reference。
图10. 概要分析透视图 -- Profiler 视图
启动监控
在运行任何特定的测试用例之前,您需要启用概要分析代理上的监控;否则,就不会发生数据收集。要启用监控,可以切换到 Profiling 透视图。在 Profiling Monitor 视图中,右键单击该 Profiling 代理,然后选择 Start Monitoring:
图11. Profiling 透视图——启用监控
练习对测试用例进行概要分析
如果服务器运行在概要分析模式下,您就可以立即对这些示例进行概要分析。应用程序的进入页面是 profiling.html 页面。从 J2EE 透视图——Navigator 视图中,选择 profiling.html 页,然后选择 Profile on Server。
下面的图12中所示的页面将在内部 Web 浏览器中打开。该页面提供了两个可以进行概要分析的实验。从内部 Web 浏览器中,只选择特定的概要分析测试实验 URL,然后等待,直到显示结果页面为止。
图12. J2EE 透视图——运行客户机测试
选择实验#1将引出如下所示的页面:
图13. J2EE 透视图——实验1
实验1是一个简单的应用程序,它把 Employee 类的实例序列化成一个文件。在大多数分布式应用程序中,类的序列化是一个基本的活动。在这第一个实验中,Employee 类的所有成员都将进行序列化。然而,正如您将在实验2中看到的,Employee 类中的某些成员对序列化的目的来说可认为是不重要的,它们被标记为瞬态,并且不进行序列化。因此,实验2中的 Employee 类,需要进行的序列化工作将比较少,而且实验2的性能应该会好得多。不过,在运行实验2之前,我们将回到 Profiling Profiling 透视图,以进一步分析实验1的性能特征。
这些性能数据都是自动收集的,但是并不显示出来。选择 Refresh Views 使 Profiler 以最新的数据填充视图:
图14. 概要分析透视图-- Refresh 视图
下面的图15展示了 Profiling 透视图中的 Package Statistics 视图。该视图使您能够更全面地了解应用程序中的哪些包需要最多的对象实例和内存。如前所述,一些需要过滤掉的系统级包出现在此视图中。在我们的示例中, acme.business.domain package包是最耗资源的:
图15. Profiling 透视图——Package Statistics 视图
下面的图16显示了 Profiling 透视图中的 Class Statistics 视图。该视图展示了应用程序中的哪些类需要最多的对象实例和内存。在下面的视图中,类 Project 和 NotTransientEmployee 需要最多的实例和内存,如字段 Total Instances 和 Total Size 所示。Collected 字段指示在全部实例中有多少作为垃圾回收了,又有多少内存由此释放了。因此,在 Active Size 字段显示的该类当前占用的内存数量中考虑了作为垃圾回收的实例。在用于实验1的示例中,我们可以看到(请参见下面的图16), NonTransientEmployee 和 Project 类需要最多的内存和全部实例中的大多数,其中没有一个显示为作为垃圾回收。
图16. Profiling 透视图——Class Statistics 视图
下面的图17显示了 Profiling 透视图中的 Method Statistics 视图。该图展示了哪些方法需要最多的执行时间。它还指示了调用一个方法需要多少时间。Base Time 字段指示运行一个方法需要多少时间,其中不包括花在调用和运行其他方法上的时间。Cumulative Time 字段指示执行一个方法的总时间是多少,其中包括花在调用和运行其他方法上的时间。Calls 字段指示调用特定方法所需的时间。Average Base Time 字段中的值等于 Base Time 字段中的值除以 Call 字段中的值。在用于实验1的示例中,,我们可以看到(请参见下面的图17), writeNonTransientEmployees() 方法尽管在此应用程序中只调用了一次,但是却显然需要最多的执行时间。而且,所有的时间都花在此方法中,而没有用在调用其他的方法上。
图17. Profiling 透视图——Method Statistics 视图
下面的图18显示了 Profiling 透视图中的 Object References Table 视图,它显示了对其他类的引用的数量。在下面的图18中,Number of References 字段没有填充。这是 Profiler 中一个已知的问题。
图18. Profiling 透视图——Object References Table 视图
既然您已经被引入了关键的 Profiling 视图,就关闭 Profiling 透视图并且停止 WebSphere Test Server ProfileServer。在 概要分析(Profiling)下再一次启动 ProfileServer。选择 profiling.html 页面,然后再一次选择 Profile on Server。尝试对实验2进行概要分析。下面的图19在内部 Web 浏览器中展示了 Experiment 2 的结果。再一次打开 Profiling 透视图,然后打开上面讨论的 Profiling 视图。在大多数情况下,实验的结果将使您确信实验2在内存和执行时间方面提供了更好的性能。
图19. J2EE 透视图——实验2
结束语
本文讨论了 WebSphere Studio Profiler 所用的结构组件,并且向您展示了如何安装、配置和使用 Profiler 来更好地理解应用程序的运行时行为。本文还讨论了如何在 Profiling perspective of WebSphere Studio 提供的各种视图中提交和解释性能数据。后续的文章将描述如何对运行在 WebSphere Application Server 上的远程应用程序进行概要分析以及如何使用 J2EE Request Profiler。