转:检查c#代码内存泄露工具-CLR Profiler工具使用
大家都知道.net有一套自己的内存(垃圾)回收机制,除非有一些数据(方法)长期占有内存不随着垃圾回收功能而释放内存,这样就造成了我们经常说的内存泄露、内存持续增长得不到释放等问题导致APS.NET网站或者C/S应用程序的用户无法正常使用。最终会导致用户通过客服人员或者技术支持人员投诉公司的技术部门,形成一连串的未知的不良反映。
不管哪位性能测试人员,遇到这样的问题都是摸不着头脑,不知从何处下手。.net环境中不像Java有那么多的工具可以支撑,比如性能测试经常用到的Jconsole、Jprofiler等工具,并且基于JAVA运行环境的在打印GC日志方面也很强大。对于.net平台,微软也提供的.net辅助工具CLR Profiler可以很好的帮助我们的性能测试人员以及研发人员,找到内存没有及时回收,占着内存不释放的方法(详细到这个方法下面定义的数组或者其他变量)。
下载地址:http://search.microsoft.com/en-us/DownloadResults.aspx?q=clr%20profiler
可根据自己电脑.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已经安装好)
我的测试环境是:IIS服务器(asp.net开发的站点)+MS sqlserver
打开CLRProfiler界面,选中Profiling active、Allocation和Calls,【Start Application】是加载.net开发的exe程序的;【Start URL】是输入被测页面URL的;

在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 菜单,可以看到在不同线程下,所有方法占用内存大小,被调用次数等信息

转:检查c#代码内存泄露工具-CLR Profiler工具使用的更多相关文章
- iOS使用Instrument的Leaks查找代码内存泄露
Here are some tips for finding leaks in our project: 1. 打开Instruments调试工具控制栏, Xcode -> Open Dev T ...
- 代码内存泄露检测(1) MLeaksFinder (Wechat开源) + FBRetainCycleDetector (FaceBook开源)
每次项目编译完成之后,都被内存搞得头昏脑胀,压力甚大. 利用两周时间,稍微研究了 微信开源的 MLeaksFinder 和 facebook 开源的 FBMemoryProfiler, 这两个开源三方 ...
- 排查python内存泄露中几个工具的使用
本文主要介绍3个工具:pdb,objgraph,以及pympler. 1.pdb pdb是专门用于python代码调试,模仿gdb. 使用pdb可以查看堆栈,打印变量等. 这里介绍的是命令行下的pdb ...
- 代码内存泄露检测工具(linux gcc + valrind)
参考博客: https://www.cnblogs.com/wangkangluo1/archive/2011/07/20/2111248.html linux命令如下:valgrind --tool ...
- CLR Profiler
检查c#代码内存泄露工具-CLR Profiler 大家都知道.net有一套自己的内存(垃圾)回收机制,除非有一些数据(方法)长期占有内存不随着垃圾回收功能而释放内存,这样就造成了我们经常说的内存泄露 ...
- 检查.net代码中占用高内存函数(翻译)
哈哈,昨天没事做,在CodeProject瞎逛,偶然看到这篇文章,居然读得懂,于是就翻译了一下,当练习英语,同时增强对文章的理解,发现再次翻译对于文章的一些细节问题又有更好的理解.下面是翻译内容,虽然 ...
- Linux下利用Valgrind工具进行内存泄露检测和性能分析
from http://www.linuxidc.com/Linux/2012-06/63754.htm Valgrind通常用来成分析程序性能及程序中的内存泄露错误 一 Valgrind工具集简绍 ...
- 精准 iOS 内存泄露检测工具
MLeaksFinder:精准 iOS 内存泄露检测工具 发表于 2016-02-22 | zepo | 23 Comments 背景 平常我们都会用 Instrument 的 Lea ...
- Visual C++内存泄露检测—VLD工具使用说明[转]
Visual C++内存泄露检测—VLD工具使用说明 一. VLD工具概述 Visual Leak Detector(VLD)是一款用于Visual C++的免费的内存泄露检测工具.他的 ...
随机推荐
- js拦截全局ajax请求
你是否有过下面的需求:需要给所有ajax请求添加统一签名.需要统计某个接口被请求的次数.需要限制http请求的方法必须为get或post.需要分析别人网络协议等等,那么如何做?想想,如果能够拦截所有a ...
- POJ1065 Wooden Sticks(贪心+动态规划——单调递减或递增序列)
描述 C小加有一些木棒,它们的长度和质量都已经知道,需要一个机器处理这些木棒,机器开启的时候需要耗费一个单位的时间,如果第i+1个木棒的重量和长度都大于等于 第i个处理的木棒,那么将不会耗费时间,否则 ...
- CentOS qt5 /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.15' not found
1.下载QT5 SDK 下载地址:http://qt-project.org/downloads. 2.安装QT5 下载完后,假设放在Download/,切换到该目录,输入:./qt-linux-op ...
- Spring 3.1新特性之二:@Enable*注解的源码,spring源码分析之定时任务Scheduled注解
分析SpringBoot的自动化配置原理的时候,可以观察下这些@Enable*注解的源码,可以发现所有的注解都有一个@Import注解.@Import注解是用来导入配置类的,这也就是说这些自动开启的实 ...
- c++语言对c的扩充
1.命名空间的使用 参见下列链接:http://www.cnblogs.com/uniqueliu/archive/2011/07/10/2102238.html 需要注意的地方:如果使用了命名空间s ...
- (微信小程序)一 : 初识微信小程序
首先看过angularjs的同学们在看微信小程序的创始文件应该不算很陌生吧. 需要看的 先是文件目录 看完这个目录..得知 ( 一 ) pages 他存放于多个页面 如 index ,log ...
- Git使用(一)——Cygwin
1.下载2.安装镜像:1)上海交大的FTP:ftp://ftp.sjtu.edu.cn/sites/cygwin.com/pub/cygwin/2)163的镜像:http://mirrors.163. ...
- F5刷新缘何会引起表单重复提交
首先,页面第一次加载,在未进行任何操作,表单没有提交过的前提下,此时点击F5刷新,是没有任何问题的. F5刷新引起表单重复提交 前提条件: 用户已通过 (1)submit按钮 (2)js的form.s ...
- [日常] Go语言圣经-可变参数习题
1.参数数量可变的函数称为为可变参数函数,例子就是fmt.Printf和类似函数2.参数列表的最后一个参数类型之前加上省略符号“...”3.虽然在可变参数函数内部,...int 型参数的行为看起来很像 ...
- Netty中消除开始的日志消息修改日志级别
我是使用logback作为日志打印,之前使用slf4j,日志打印不出,就干脆换掉了. 1.首先引入依赖 <dependency> <groupId>ch.qos.logback ...