This is a wonderful world

去自己想去的地方,呼吸那里的空气,贴近那里的土地,认识那里的人们......

导航

<2007年6月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

统计

公告

昵称:shyuan
园龄:6年5个月
粉丝:0
关注:0

搜索

 
 

常用链接

随笔分类

随笔档案

最新评论

阅读排行榜

评论排行榜

推荐排行榜

系统性能分析(找出trouble maker)

老听到客户抱怨“你的系统很慢啦!”做为无所不能的设计者,该这么解决这个问题呢? 
第一问题:系统慢在哪了?这时候有两种情况:
1.客户明确的抱怨某个功能很慢。OK,这种问题容易解决,调出这个功能的Unit test函数来(应该不会没写单元测试吧?:),如图所示:



单击“Create Performance Session”,创建一个Performance Session。



单击Launch的按钮,Performance Session会自动创建一个性能报告,包括了:最经常调用的函数,函数的执行时间,函数列表,程序调用堆栈。是不是很神奇?


调用堆栈段:


一旦知道哪些函数调用最慢,接下来就是修改代码咯(也许是tunning DB)。

2.整个系统很慢,你不知道问题出在哪了?
整个系统很慢?压力测试是怎么做的?!!呵呵,说笑了,我们一起找出问题根源。先打开Performance Explorer, 选择Web项目:



然后输入你要测试的URL,要注意的是Profiling Method选择Instrumentation。Instrumentation方法下Performance Explorer只探测你的应用程序,不会记录一大堆.net类库函数的调用。我想在大多数情况下,我们不关心.net类库的运行性能,因为无法改。



生成的项目如下:


接下来启动测试,模拟用户输入,让Performance Explorer捕获测试数据。



注意分析程序的调用的Call Tree:第一列是调用函数名,第二列是调用次数,第三列是耗时。导致系统运行缓慢的坏孩子在哪?那些调用较多同时又长时间运行的就是啦!把他们拖出去毙了,系统就活了。

当然,强烈不建议在production计算机上运行这样的调试。第一,影响正常运行;第二,你不会想在生产计算机上装个VS2005吧?(Profiling 使用探针技术,似乎没有远程插入的功能) 正确的做法是备份一份系统和数据到测试服务器上,在测试服务器上运行。

附:在Performance Explorer这个漂亮baby诞生之前,我们是怎么做性能分析呢:
1. 在系统的每个方法中加入Traceing,在问题发生时打开,在问题解决后关闭Traceing。缺点很明显:非业务功能代码不合时宜的出现在许多方法中。
2. 使用依赖注入。例如Elib3.1中在方法头加入log标签。缺点也很明显,因为每个对象是动态构造的,造成系统性能损失。

第二个问题:系统什么时候慢?有的系统有的时候快,有的时候慢,例如晚上9:00开始就特别慢?是网络问题?是设计问题?是磁盘问题?不要瞎猜了,下篇我们就把trouble maker揪出来!
待续......

posted on 2007-06-11 17:02 shyuan 阅读(3365) 评论(13) 编辑 收藏

评论

#1楼 2007-06-11 17:23 reson[未注册用户]

请问楼主,Performance Explorer那里有下载啊?  回复 引用   

#2楼 2007-06-11 18:11 Justin      

排版似乎有点问题,在我这里看,上面整屏空白  回复 引用 查看   

#3楼[楼主] 2007-06-11 18:41 shyuan      

Performance Explorer VS2005自带
多谢Justin提醒。
 回复 引用 查看   

#4楼 2007-06-11 19:22 yihui

不错的哦,有个问题问下,如果application 是backend services, 不想整个application测试,只需要run unit test,然后通过这工具去计算某个class的性能,那就需要在这launch unit test 做为入口点 ,但如果用nunit 测试,可以用跟终进程的方式进行性能分析, 那如果是vsts 集成的unit test,该怎么跟终呢?  回复 引用   

#5楼 2007-06-11 19:24 yihui

怎么回复后才发现是你啊,my leader.  回复 引用   

#6楼 2007-06-11 21:29 蛙蛙池塘      

通过新的 Enterprise Performance Tool 使应用程序飞速运行
http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/enterpriseperformance.mspx?mfr=true
如何最大限度提高.NET的性能
http://www.itepub.net/html/kaifajingcui/Asp_Net/2006/1220/42362.html
http://www.itepub.net/html/kaifajingcui/Asp_Net/2006/1220/42353.html
Google Performance Tools
http://www.muduo.net/batch.viewlink.php?itemid=75268
ASP.NET Performance Case Study: Web Service calls taking forever
http://blogs.msdn.com/tess/archive/2006/02/23/537681.aspx
 回复 引用 查看   

#7楼 2007-06-11 22:56 Hunts.C      

Mark:)  回复 引用 查看   

#8楼 2007-06-12 00:01 沧海依粟      

很不错,谢谢..  回复 引用 查看   

#9楼 2007-06-12 09:09 teana[未注册用户]

good  回复 引用   

#10楼 2007-06-12 12:36 达达[未注册用户]

我顶~~呵呵  回复 引用   

#11楼 2007-06-12 12:43 达达      

Performance Explorer出现前有一个第三方公司做的工具,可以做到一样的测试效果。忘记什么名字了 ;-)  回复 引用 查看   

#12楼 2007-06-12 16:00 guozili      

请问上面的Performance Explorer 在 vs2005里面还是?  回复 引用 查看