CLR Profiler 性能分析工具 (转)

原文地址:http://www.cnblogs.com/kevinlzf/archive/2010/11/12/1876066.html

下载地址:http://www.microsoft.com/en-us/download/details.aspx?id=16273  CLR Profiler for .NET Framework 4

最近关注程序性能的优化方面,本想写篇CLRProfiler的简要文档,看到pengpeng已写好,那就转载好了,偷偷懒。

.Net的尽管拥有非常强大调试器,但也有很多局限性,只限于CLR之上,无法得之CLR的具体细节,而且在多线程上就显得很无力。CLR在运行中隐藏了很多细节,像.net语法糖上的一些细节可以通过reflector得知(.Net  很多api在不同的版本实现细节也有较大的改动)CLR的运行也可以通过一些工具得到。也许你会问为什么也知道这些细节呢?要知道.net也是有很多bug而且.Net中的BCL多数都是在CLR中实现的,通过他我们可以很清楚找到我们的代码是怎么运行的,快速的找到代码的运行瓶颈。
  这类工具有很多,如vs自带的性能分析,Windbg,clr profiler。 vs自带的性能分析可以很快的找到瓶颈代码,而且支持多线程。Windbg就更彪悍了,不过使用起来就比较费劲,搭配sos,可以在运行时查看应用程序的一些状态,但没有另外的两种详细。这里主要要说的是CLR Profile了,他检测结果最为详细,不过致命检测会影响应用程序的运行速度而无法得之时间上的性能测试,好像使用的人不多。有空写写windbg:)
      CLR Profiler 有两个版本,分别用于CLR1.1 和 CLR2.0,至于CLR4卧试了一些也可以,但不知道是否完全兼容不,分别2003,和2005 由微软CLR性能组发布的。几百k很小巧的工具,有给出源代码,核心部分用C++写的,UI使用C#编写。CLR Profiler使用注入式测试,他会记录每一次的内存分配和方法调用,因而严重的影响程序的执行速度,会慢10~100倍的样子,而且无法直接附加到当前运行的进程。 
     CLRProfiler 是个侧重于跟踪分析GC heap的运行情况的的工具。
      使用它你可以知道:
1.那个方法分配了那些类型的对象?
2.那些对象存活下来了?
3.在heap都有些什么?
4.是什么保持对象的存活?
5.在调用统计中可以得知方法被调用的的频率?
6.测试应用程序,asp.net(这个我没整有成功),和service
7.抓dump
8.提供命令行和api(没试过)

也有不足之处:
1.减缓运行速度,结果不能表明程序的速度
2.不能附加到进程
3.他因为记录了很多内容,如果记录了很长的时间,分析的过程将会很久
4.也就是这个东西,只好用来测试环境,生产环境就得Windbg了

先给张运行截图,在下面说面各种功能。

这是工具的祝界面,start application 选择需要运行的程序,可以选择是否跟踪内存分配和方法调用。当关闭应用程序(可以自动或手动),Profiler自动开始整理结果。显示如下:

在这里显示本次统计中的汇总。

Clr Profiler有个抓Dump的功能,当然是及时性的,在程序运行时点击show head now 即可抓取Dump同时很快的统计处分析结果。

如下:

在统计界面上有很多查看详情的按钮:

heap statistic 堆栈对象信息统计

Allocated :应用程序整个启动周期内分配的对象,按照对象大小排列,不同的颜色代码不同的对象,这在右侧会列出,没有截出来,下面的也是这样:

Relocated:重新移动过的对象,GC之后内存整理移动过的对象:

Finally head 最终堆栈内对象信息:

还有object finalized 和 critical object finalized,表示被终止化器终止的对象,后面那个是特殊标记过的终止对象,图相差不大就没有截取了。

接下来的就是垃圾回收统计

这个归总了回收次数

TimeLine:这是详细图(貌似这个得较强的显卡渲染,在公司那机器就出不来)

图中可以清晰的看出各次回收时间和前后内存占用量

GC Handle 统计GC句柄数

具体细节如下:

其他

summery界面没有显示所有的功能:

在View下面可以找到这些:

在所有的柱形图上右键有如下菜单,show who allocated Is a nice one,通过他可以追踪对象是谁分配的。

assmebly graph

class graph

call tree 这个功能记录每个方法的调用次数,感觉还是vs自带分析好些,那个还能统计时间占用:)

和进哥说起这个CLR Profiler,说回去写篇使用说明发出来。终于写好了,写篇还真花时间,这回真的理解live writer的好用,如果在网页里面编辑真要死人了。

这是对CLR Profiler介绍性的文章,具体应用场景在看完应该也能想到。限于篇幅,很多内容没有写出来,在卸载clr profiler中会带有详细的说明,100多页,真的很详细,有了它就没必要再去查什么资料了。建议不明白的还是看看那个为好:)

转自:http://www.cnblogs.com/lulu/archive/2010/08/21/1805444.html

时间: 2024-10-21 11:43:09

CLR Profiler 性能分析工具 (转)的相关文章

Visual Studio代码性能分析工具

AMD CodeXL 2011年发布的AMD CodeAnalyst Performance Analyzer 现在已经被AMD CodeXL所替代.AMD CodeXL的主要目的是帮助开发者更好利用CPU, GPU和APU的计算性能,具有强大的GPU调试.CPU和GPU代码分析.及静态的OpenCL内核性能分析等能力. AMD提供了支持Windows 7.Windows 8和Linux系统的单机版CodeXL分析工具.在Visual Studio 2010,2012和2013上也有AMD Co

11个Visual Studio代码性能分析工具

软件开发中的性能优化对程序员来说是一个非常重要的问题.一个小问题可能成为一个大的系统的瓶颈.但是对于程序员来说,通过自身去优化代码是十分困难的.幸运的是,有一些非常棒的工具可以帮助程序员进行代码分析和性能测试,从而大大简化程序员进行代码性能优化的过程.MSDN杂志2011年7月份曾发布主题为“.NET代码分析工具和技术”的那一期,让广大程序员收获颇丰.四年过去之后,这些工具又进一步做出了很多改进,同时也出现了更多的选择.本文对当前主流的一些Visual Studio代码性能分析工具进行简单的梳理

11 个 Visual Studio 代码性能分析工具

软件开发中的性能优化对程序猿来说是一个很重要的问题. 一个小问题可能成为一个大的系统的瓶颈. 可是对于程序猿来说.通过自身去优化代码是十分困难的.幸运的是.有一些很棒的工具能够帮助程序猿进行代码分析和性能測试,从而大大简化程序猿进行代码性能优化的过程.MSDN 杂志 2011 年 7 月份曾公布主题为".NET 代码分析工具和技术"的那一期.让广大程序猿收获颇丰.四年过去之后,这些工具又进一步做出了非常多改进,同一时候也出现了很多其它的选择.很多其它应用代码安全工具请点击:http:/

Java 性能分析工具

如何利用 JConsole观察分析Java程序的运行,进行排错调优 http://jiajun.iteye.com/blog/810150 如何使用JVisualVM进行性能分析 http://jiajun.iteye.com/blog/1180230 全功能的Java剖析工具(profiler) http://www.blogjava.net/mrzhangshunli/archive/2007/08/27/140088.html http://www.cnblogs.com/jayzee/p

.NET 性能分析工具

Download .NET Profiler http://www.yourkit.com/dotnet/download/ dotTrace 5.5 Performance http://www.jetbrains.com/profiler/ .NET 性能分析工具,布布扣,bubuko.com

Java 性能分析工具 , 第 2 部分:Java 内置监控工具

引言 本文为 Java 性能分析工具系列文章第二篇,第一篇:操作系统工具.在本文中将介绍如何使用 Java 内置监控工具更加深入的了解 Java 应用程序和 JVM 本身.在 JDK 中有许多内置的工具,其中包括: jcmd:打印一个 Java 进程的类,线程以及虚拟机信息.适合用在脚本中.使用 jcmd - h 来查看使用方法. jconsole:提供 JVM 活动的图形化展示,包括线程使用,类使用以及垃圾回收(GC)信息. jhat:帮助分析内存堆存储. jmap:提供 JVM 内存使用信息

Python性能分析工具Profile

Python性能分析工具Profile 代码优化的前提是需要了解性能瓶颈在什么地方,程序运行的主要时间是消耗在哪里,对于比较复杂的代码可以借助一些工具来定位,python 内置了丰富的性能分析工具,如 profile,cProfile 与 hotshot 等.其中 Profiler 是 python 自带的一组程序,能够描述程序运行时候的性能,并提供各种统计帮助用户定位程序的性能瓶颈.Python 标准模块提供三种 profilers:cProfile,profile 以及 hotshot. p

三种Linux性能分析工具的比较

无论是在CPU设计.服务器研发还是存储系统开发的过程中,性能总是一个绕不过去的硬指标.很多时候,我们发现系统功能完备,但就是性能不尽如意,这时候就需要找到性能瓶颈.进行优化.首先我们需要结合硬件特点.操作系统和应用程序的特点深入了解系统内部的运行机制.数据流图和关键路径,最好找出核心模块.建立起抽象模型:接着需要利用各种性能分析工具,探测相关模块的热点路径.耗时统计和占比.在这方面,Linux操作系统自带了多种灵活又具有专对性的工具,此外一些厂家也开源了不少优秀的性能分析工具.下面就结合笔者最近

系统级性能分析工具perf的介绍与使用

测试环境:Ubuntu14.04  on VMWare Kernel:3.13.0-32 系统级性能优化通常包括两个阶段:性能剖析(performance profiling)和代码优化.性能剖析的目标是寻找性能瓶颈,查找引发性能问题的原因及热点代码.代码优化的目标是针对具体性能问题而优化代码或编译选项,以改善软件性能. 在性能剖析阶段,需要借助于现有的profiling工具,如perf等.在代码优化阶段往往需要借助开发者的经验,编写简洁高效的代码,甚至在汇编级别合理使用各种指令,合理安排各种指