JProbe最佳实践指南(3)

上一篇我们简单地概括用于解决对象循环问题的步骤

3.2 性能分析

解决对象循环问题有助于性能的改进,但你可能仍然面临着性能瓶颈。进行一次性能分析可帮助你在J2EE应用中识别低效率的算法。JProbe Profiler提供了应用的方法级和源代码行级度量值。

3.2.1 启动JProbe Profiler调查会话。

1. 启动JProbe Profiler。当欢迎界面出现时,点击"Run"开始。

图8 JProbe欢迎窗口

2. 在JProbe LaunchPad窗口中:
a. 选择"Using Application Server"
b. 从Application Server下拉菜单中选择BEA Weblogic6.1
c. 注意在Integration ID下拉菜单中填JProbe Demo 1

3. 选择Filter
a. 点击Please enter a package,class,or method to display data for。输入你要调查的包profiler.com.quoteme.stockwatch
b. 从Detail Level列的下拉菜单中选择Line Lever

这个元素定义了我们想要把所有运行在环境中的Java软件看作基础结构。因为我们不想详细了解它们的性能信息 (我们只是想知道在代码上的影响,我们不想更细地分析)

提示:在WLS6.1中的JSP Profiling当JSP被WebLogic Server6.1编译时,产生的servlet被给予一个产生的包和类名。例如,如果有一个名为TestJSP.jsp的JSP文件,它被编译后,生成名为jsp_servlet._testjsp的类(两个底线被JSP名跟着,都是小写字母)。 如果你想跟踪你的JSP里的方法在执行中花了多少时间,你必须指定正确的过滤策略,用于捕获数据。

4. 选择"CPU Time"
5. 选择"Record Performance at Program Start"复选框
6. 选择"a Snapshot Directory:"为d:\temp
7. 点击"Run"按钮

图9 JProbe Profiler LaunchPad窗口

3.2.2 运行时交互

在性能分析中,Heap Usage Chart就象一个执行进度的监视器,与上节介绍的Garbage Monitor不同,这里不提供类似的运行时性能信息。使WebLogic Server自己初始化到完全启动。

作为对象循环分析,我们推荐使用应用级的,以用例为中心的方法进行性能分析,具体如下:
1. 清空累积的性能数据 。
2. 运行你的应用用例。
3. 执行一次性能快照 ,保存性能信息。

性能快照包括时间和在用例运行期间对象创建等度量数据(这个运行期间从重新设置性能信息开始-第一步,一直到执行快照结束,第三步)。

3.2.3 解释结果

JProbe Profiler提供两个工具,以不同的格式显示收集到的数据;可根据具体情况选择:

Method List是指以表的形式显示与方法有关的数据信息。使用Method List可以按照名称或度量值排序,或显示只显示其中部分方法。
Call Graph--是指以有向图的形式显示方法。可以使用Call Graph查看并跟踪程序中方法间的调用关系。从Method List或Call Graph中,你能使用下面这些工具深入到更多的细节数据。
Method Detail View是指对于所选的方法,显示它们是被哪些方法(也称父方法)调用了或它们调用了哪些方法(也称子方法)。
Source Window显示所选方法的语句级性能信息。

3.2.3.1 Time and Object Creation Metrics

JProbe Profiler在方法方面收集了三个基本度量值:

Number of Calls是指在会话期间该方法被调用的次数
Method Time是指执行该方法所花费的总时间
Method Objects是指该方法创建的对象总数

在这些基本的度量值基础上,JProbe Profiler计算出两种度量值表示方法调用树:

Cumulative Time是指执行这些方法的时间,和执行它们直接或间接调用的方法所花费时间的总和。
Cumulative Objects是指这些方法创建的对象,和这些方法直接或间接调用其它方法创建的对象的总合

基于Number of Calls用四种平均度量值:

Avg.Method Time是指调用方法的时间除以调用次数
Avg.Method Objects是指方法对象除以调用次数(方法对象指方法执行期间创建的对象数,不包括派生对象创建的数)
Avg.Cumulative Time是指累积时间除以调用次数
Avg.Cumulative Objects是指累积对象除以调用次数

在默认情况下,Call Graph显示的数据是在性能快照中的数据。我们建议你关闭Call Graph一会再打开Method List窗口。

3.2.3.2 Method List

Method List窗口(见图10)以表的形式显示性能数据。

图10 JProbe Profiler Method List窗口

每一行显示了方法的时间和方法创建对象的度量值。使用Method List能很快识别你最耗时的方法。通常你会发现你的性能瓶颈和这些方法有关。

如果你是第一次调查,跟着下面这些步骤将使你能更有效地使用Method List。
1. 选中你的snapshot,打开"Method List"。
2. "Filter"区域只用于显示在你包中或在你感兴趣的类中的方法。
3. 点击"Method Time"列名,把你最消耗时间的方法排在最前面。仔细查看前十个。是不是有一些度量值令你惊讶?你能改进你方法中的算法吗?
4. 点击"Cumulative Time"列名,把最消耗时间的调用树排在最前面。比较一下"Method Time"和"Cumulative Time"。虽然方法本身可能效率很高,但也可能调用了低效率的方法,这些低效率的方法可能在你的代码中,或者在第三方的包或应用框架中。
5. 点击”Number of Calls”列名,查看一下你哪个方法被调用最多。如果一个或多个度量值同时反映这些方法是低效率的,需要考虑减少调用这些方法,或调用那些效率稍好的方法。

3.2.3.3. Call Graph

Call Graph(见图11)提供一个非常有力的方法调用关系视图。它把J2EE应用放到WebLogic Server上下文环境中,所以你能看到WebLogic启动的所有线程,包括调用J2EE应用的线程。为了方便查找,Call Graph下面有"Method List"。

当分析性能时,在定位J2EE应用的入口点和排除与WebLogic线程有关的数据方面, Call Method是最有效的。在分离出应用的数据基础上,可快速画出执行流程,并用图形清晰地显示出来。

下面是使用Call Method的有效技巧:

1. 选中你的snapshot,打开"Call Graph" 。
2. 点击"Find"并且定位你的J2EE应用的入口位置。 通常是servlet中的doGet()或doPost()方法。
3. 选择方法并分离出数据形成图形 。
4. 显示方法的一个子集作为开始,这些方法按照"Cumulative Time"排序是最耗时的方法。当你分析一个方法,在方法的调用树上将增加额外的节点。
5. 在"Method List"中,根据你发现的瓶颈位置,在"Color By"的下拉列表中选择相同度量值。根据你选择的度量值,现在最耗时的方法都以鲜艳的颜色突出显示出来。
6. 选择最耗时的方法。展开父方法树(通过点击节点部分或节点左边部分的空箭头记号),就能看到哪个方法调用它了。你可以调用不同的,耗时比较少的方法吗?你需要经常调用这些方法吗?
7. 展开子方法树(指向节点的右边),可以看到调用了哪个耗时的方法。还有哪些子方法也是耗时的呢?你意识到第三方的方法实际的耗时情况吗?你能调用一个实现了更有效率算法的不同方法吗?

图11 JProbe Profiler Call Graph窗口

3.2.3.4 Method Detail View

从Method List或Call Graph中,你都能深入地分析,在一个视图中很方便地看到耗时的方法的度量值,还有它们子方法和父方法的度量值。选择方法并打开"Method Detail View" 。

"Method Detail View"(见图12)在窗口的中心显示了选择方法,它的父方法在上面,它的子方法在下面。我们对列的头部已经熟悉了,它们和你在其它工具中看到的度量值相同。一个重要的区别是:用于显示父方法和子方法度量值表示对所选方法的贡献值,不是对它们自己的度量值。所以,如果一个方法被调用了12次,这些调用它的方法,和12次调用分别显示在父方法的图中。如果你想继续分析父方法或子方法,双击该方法,使该方法在"Method Detail View"的中心显示。

图12 JProbe Profiler Method Detail窗口

3.2.3.5 Source Window

要查看你方法中的代码,选择方法并且打开Source Window。你需要指出你的源代码具体位置。

如果你是按行收集数据,你能在Source Window(见图12)中看到这些数据。在左列中,显示了每条语句的数据度量值。行级度量值是方法级度量值的细化,包括调用次数,执行该行的时间,执行该行时创建的对象数量,累积时间和累计对象数量。

提示:如果需要编辑你的代码,并且已经把集成开发环境IDE和JProbe Profiler集成在一起了,你可以通过选择Edit>Edit Source打开你的集成开发环境。当然,需要运行你重写的代码,并建立新的JProbe Profiler分析会话时,你做的改变才反映在JProbe Profiler上。

图13 Jprobe Profiler Source Window

(T111)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值