[原创]DebugTools系列(4):AQTime经验总结

导读这篇文章是AQTime系列的最后一篇,主要介绍一些实用的技巧,因为作者也是初学乍练,我已经将我所知道的都写出来跟大家分享了!关于AQTime,没有涉及到的肯定还很多,至少我还没有完整看完那份400多页的使用手册,相信里面还有很多知识点这个系列都没有覆盖到,不过没关系,我也是在“ I try to learn things is by "teaching"”,所以强烈希望熟悉AQTime的朋友如果正巧路过,留下您的宝贵经验跟大家分享,也非常欢迎AQTime的菜鸟没把你的疑问和困惑提出来,大家一起解决。
记得留下宝贵意见哦!!!

Tip1:如何通过[Event View]找到准确的Modules

记得在第二篇文章里我提到了配置分析范围,在上一篇最后我们也提到了如果能在一开始就准确地加载必要的Modules,然后只分析收集Modules列表里的Module的性能数据,会有效提高收集数据的速度和分析数据时的工作量。那么,一般我们分析一个应用程序的时候,很多时候可能这个程序并不是我们自己写的,或者我们只是写了其中一小部分,所以我们并不很清楚到底要加载的那些Modules都部署在什么位置,或者说程序到底加载了那些Modules我们也可能根本不清楚。
那么这个时候我们怎么办?我们怎么才能轻松准确地加载最合适的Modules呢?这个Tip就是为了究竟这个问题的,那就是利用AQTime的[Event View]页签记录的值,找到你需要的Modules,[Event View]里会记录程序整个生命周期加载的所有Modules,包括操作系统、框架和程序自身,而且在[Event View]可以直接查看到这些Modules的本地完整绝对路径。说到这里,想必大家已经基本都清楚了吧,要做的就是再AQTime里空跑(至少要加载一个Module)一次完整的你要收集数据的过程,然后去[Event View]里把你需要的Modules挑出来即可,如果觉得在[Event View]里查看不方便,可以通过右键[Save All...]将[Event View]的结果保存为一个HTML文件后再查看,这样会方便很多。



参考上图,看看我们找到了什么,是的,这些就是我们在第一篇文章里就提到过的由ISAPI动态生成的aspx文件对应的类的DLL,这些真是我们需要的,保证准确无误的Modules了!

Tip2:如何设置[Last Results]里临时保存的个数

OK!这个Tip还要从我的一次糗事说起,前段时间大面积调试性能,我一次要收集大约15个功能点的性能问题,都是订单体要求100行大数据量的,本来我们的订单就很大,运行性能已经不是很理想了,如果还是100行的,再加上同时挂上AQTime,还是用我自己的P4 2.6的破机器做服务器,结果就慢的要急死人了,平均每个功能点收集一次需要25分钟以上。所以那天我一上午只收集了大约5个功能点的性能数据,午饭后没有睡午觉,跟同事PK了一会儿街霸对拳皇,就继续收集其他功能的,下午人都有点犯困,警惕性不高,大约收集到第10个功能点时,突然发现[Last Results]列表里为什么只有五组结果呢?上午做的东西都哪去了?!在晕菜了半天以后,最后找到了原因:AQTime默认只能在[Last Results]里保存最近五次的结果数据,第六次的会自动覆盖第一次的,如此反复,也就是说,我下午晕晕的时候,把上午的辛勤劳动果实就那样覆盖掉了!简直太糗了!最后反复确认,被覆盖掉的东西是找不回来的,那些数据只能重新收集一遍了!



如上图所示,在AQTime里是可以通过Panel Options里的"Number of recent results to keep"来设置这个默认值的,所以请大家记住,安装完AQTime以后,记得先把这个值设置大一些,比如100应该足够了!



如上图所示,另一个防止收集结果数据丢失的方法是每次收集完,确认结果有效且需要保持下来备用的,可立即使用右键菜单里的"Move to Saved Results"将结果保存到[Saved REsults]分组里即可,或者使用"Save to File..."保存成单独的aqr文件,这样最保险!

Tip3:如何通过[Summary]快速定位地雷

AQTime在[Summary]页签自动对性能数据从Worst Performance(body only)、Worst Performance(with children)和Routine with max hitCount三个方面进行了汇总,这上个方面其实就是上一篇文章我们介绍的Grid里的[Time]、[Time with Children]和[HitCount],很多时候,这个汇总还是很有用的,例如上一篇文章里的地雷,在下图第一项汇总结果里就已经表露无遗了,所以推荐大家在分析性能数据的时候,养成总是先从[Summary]页签开始的良好习惯。


Tip4:如何通过[Editor]同步查看源代码

一般情况下,如果是调试阶段的性能测试,且你加载的Module是在你的本地环境上编译的,也就是说通过Module(一般指DLL或exe),AQTime可以根据其元数据信息自动找到本地的源代码并自动显示在[Editor]页签里,并且跟Grid列表焦点行上的方法自动同步对应。这是一个非常重要且实用的功能,因为在我们分析性能数据的时候,当你怀疑某个地方有地雷的时候,只要打开[Editor]页签就可以直接看到源代码了,这简直是太方便了。
不过有时,还是经常会出现无法正常查看源代码的情况,这时主要检查这几个方面:
1、Grid列表焦点行上的方法是底层框架的或其他你无法获得源代码的,那么查看不到就是正常现象了!这时倒是可以通过[Disassembler]页签查看反汇编的结果,不过这个看起来肯定是没那么舒服了。
2、如果你只是在一个空项目里加载一个别人共享的aqr文件,那么这个时候你可以把能加载的Module都加载上,就可以自动定位到大部分源代码了,因为aqr文件里只记录了方法名和其各种性能数据结果,它需要通过已经加载的Module去关联源代码才行。
3、通过设置"Search Directories..."定位到源代码的位置,有时候因为你加载的Module里记录的源代码路径不一定跟你本地环境的完全相同,而你确实还有这个Module的源代码,那么就需要通过设置查找路径的方式来定位到源代码了,具体请参考下图:


Tip5:如何在Visual Studio里使用AQTime PlugIn

AQTime在安装的时候,会提示是否作为PlugIn关联到Visual Studio环境,如果安装了,那么在VS的ToolBar里就会多出一个Profiler菜单,通过这个菜单,可以进入一个完全嵌入在VS IDE环境中的AQTime环境,用法跟单独打开的AQTime没什么区别,暂时我们感觉到的最大的区别就是没有[Editor]页签,在Grid列表上双击某个方法,如果是当前项目的,就会自动定位到对于的文件上,这样查看和修改源代码确实会比较方便,其他就没什么感觉了,具体可参考下面的图示。



Tip6:AQTime学习资源

1、系统学习AQTime的最佳资源:Download AQtime User Manual (PDF format) - 7,404K
2、官方的实例:AQtime Case Studies

Debug 探索团队
-欢迎加入博客园.Debug探索团队 Copyright © Justin
posted @ 2008-10-30 08:54  Justin  阅读(3073)  评论(5编辑  收藏  举报