你们都知道.net有一套本身的内存(垃圾)回收机制,除非有一些数据(方法)长期占有内存不随着垃圾回收功能而释放内存,这样就形成了咱们常常说的内存泄露、内存持续增加得不到释放等问题致使APS.NET网站或者C/S应用程序的用户没法正常使用。最终会致使用户经过客服人员或者技术支持人员投诉公司的技术部门,造成一连串的未知的不良反映。java
无论哪位性能测试人员,遇到这样的问题都是摸不着头脑,不知从何处下手。.net环境中不像Java有那么多的工具能够支撑,好比性能测试常常用到的Jconsole、Jprofiler等工具,而且基于JAVA运行环境的在打印GC日志方面也很强大。对于.net平台,微软也提供的.net辅助工具CLR Profiler能够很好的帮助咱们的性能测试人员以及研发人员,找到内存没有及时回收,占着内存不释放的方法(详细到这个方法下面定义的数组或者其余变量)。web
下载地址:http://search.microsoft.com/en-us/DownloadResults.aspx?q=clr%20profilersql
可根据本身电脑.NET的版本下载相应的CLRProfiler,我下载的是CLR Profiler for .NET Framework 4版本的。数组
下载后提示解压缩,选择要加压到的目录;而后进入D:\SoftWare\CLRProfiler4\CLRProfiler\Binaries目录下选择对应操做系统64位或者32位的CLRProfiler.exe。
在说一下,CLRProfiler能够分析.net平台开发的几乎全部的产品,包括C/S应用程序、服务和asp.net编写的网站等。服务器
说明:该工具适用于性能测试瓶颈定位,作性能测试时不建议开启,须要安装在应用服务器所在服务器(iis和.netframework已经安装好)asp.net
个人测试环境是:IIS服务器(asp.net开发的站点)+MS sqlserver工具
打开CLRProfiler界面,选中Profiling active、Allocation和Calls,【Start Application】是加载.net开发的exe程序的;【Start URL】是输入被测页面URL的;sqlserver
在IE中测试asp.Net开发的页面,CLRProfiler首先要加载IIS所须要的环境变量,CLR Profiler而后提示你加载ASP.NET应用程序和等待ASP.NET工做进程启动。性能
在File菜单中点击Profile ASP.NET测试
中止IIS服务可能要很长时间,须要耐心等待。最后提示能够测试页面啦
“Waiting for ASP.NET to start common language runtime - this is the time to load your test page”
点击【Start URL】按钮,输入咱们要测试的页面URL,点击OK,就会自动打开咱们要检查内存有不释放内存的页面,多在页面中使用一会,以便CLR Profiler收集更多的数据。
当已完成页面的运行,请点击CLR Profiler窗口中的 【Kill ASP.NET】。而后CLR Profiler自动关闭IIS,移除环境变量,重启IIS。
点击【Allocation Graph】打开内存分配视图,在这个视图当中咱们能够看出堆栈是如何分别对象的
点击【Objects by Address】按钮将会显示各类方法在内存中占用的直方图界面
能够经过选中那个视图中的某一个柱形条,右击show who allocated。点击这个菜单项显示关于所选分配的特定详细内容,而不是全部分配的
点击[TimeLine]按钮,在打开的图片中能够清晰的看出各次回收时间和先后内存占用量状况
在view菜单中,有不少没有显示的菜单。
点击call tree 菜单,能够看到在不一样线程下,全部方法占用内存大小,被调用次数等信息