大家都知道.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工具使用的更多相关文章

  1. iOS使用Instrument的Leaks查找代码内存泄露

    Here are some tips for finding leaks in our project: 1. 打开Instruments调试工具控制栏, Xcode -> Open Dev T ...

  2. 代码内存泄露检测(1) MLeaksFinder (Wechat开源) + FBRetainCycleDetector (FaceBook开源)

    每次项目编译完成之后,都被内存搞得头昏脑胀,压力甚大. 利用两周时间,稍微研究了 微信开源的 MLeaksFinder 和 facebook 开源的 FBMemoryProfiler, 这两个开源三方 ...

  3. 排查python内存泄露中几个工具的使用

    本文主要介绍3个工具:pdb,objgraph,以及pympler. 1.pdb pdb是专门用于python代码调试,模仿gdb. 使用pdb可以查看堆栈,打印变量等. 这里介绍的是命令行下的pdb ...

  4. 代码内存泄露检测工具(linux gcc + valrind)

    参考博客: https://www.cnblogs.com/wangkangluo1/archive/2011/07/20/2111248.html linux命令如下:valgrind --tool ...

  5. CLR Profiler

    检查c#代码内存泄露工具-CLR Profiler 大家都知道.net有一套自己的内存(垃圾)回收机制,除非有一些数据(方法)长期占有内存不随着垃圾回收功能而释放内存,这样就造成了我们经常说的内存泄露 ...

  6. 检查.net代码中占用高内存函数(翻译)

    哈哈,昨天没事做,在CodeProject瞎逛,偶然看到这篇文章,居然读得懂,于是就翻译了一下,当练习英语,同时增强对文章的理解,发现再次翻译对于文章的一些细节问题又有更好的理解.下面是翻译内容,虽然 ...

  7. Linux下利用Valgrind工具进行内存泄露检测和性能分析

    from http://www.linuxidc.com/Linux/2012-06/63754.htm Valgrind通常用来成分析程序性能及程序中的内存泄露错误 一 Valgrind工具集简绍 ...

  8. 精准 iOS 内存泄露检测工具

    MLeaksFinder:精准 iOS 内存泄露检测工具 发表于 2016-02-22   |   zepo   |   23 Comments 背景 平常我们都会用 Instrument 的 Lea ...

  9. Visual C++内存泄露检测—VLD工具使用说明[转]

    Visual C++内存泄露检测—VLD工具使用说明 一.        VLD工具概述 Visual Leak Detector(VLD)是一款用于Visual C++的免费的内存泄露检测工具.他的 ...

随机推荐

  1. 初入Java后端之Servlet

    初入Java后端之Servlet 后端 Servlet  什么是Servlet? Servlet实际上是一个按照Servlet规范写的Java类.是运行在Web服务端的Java应用程序.与Java程序 ...

  2. C# Azure 用Webhook添加警报规则

    本篇文章的目的是什么? Azure云端一直困扰着我的是,如果遇到数据库累积数据量过大.数据库DTU过大.应用程序服务访问量过大等,我们都没办法知道他们什么时候过大.只能做的是,我们天天看着我们的应用, ...

  3. 聊聊Java内存模型

    一.Java内存模型 硬件处理 电脑硬件,我们知道有用于计算的cpu.辅助运算的内存.以及硬盘还有进行数据传输的数据总线.在程序执行中很多都是内存计算,cpu为了更快的进行计算会有高速缓存,最后同步至 ...

  4. java环境配置及原理详解

    java环境配置及原理详解 1.java跨平台的本质 我们谈到java,总是提到跨平台这个词.那么java语言是怎么实现跨平台的呢? 我们编写的java代码不是直接让windows系统读取解析,而是在 ...

  5. C++11 使用 std::async创建异步程序

    c++11中增加了线程,使得我们可以非常方便的创建线程,它的基本用法是这样的: void f(int n); std::thread t(f, n + 1); t.join(); 但是线程毕竟是属于比 ...

  6. js 日文全半角转换

    客户的需求是,输入半角字符或日语假名,筛选出来的结果显示包含该字符的半角形式和全角形式的所有结果,输入全角也是同样的结果.这里就需要将输入的字符全部转为半角和全角,再去匹配结果. 在网上搜了一圈之后, ...

  7. Codeforces633G(SummerTrainingDay06-I dfs序+线段树+bitset)

    G. Yash And Trees time limit per test:4 seconds memory limit per test:512 megabytes input:standard i ...

  8. Codeforces485D(SummerTrainingDay01-K)

    D. Maximum Value time limit per test:1 second memory limit per test:256 megabytes input:standard inp ...

  9. 使用ThinkPHP实现生成/校验验证码功能

    首先了解父类Verity.class.php(ThinkPHP/Library/Think/Verity.class.php)中的一些函数 1:check() 校验验证码是否正确 2:entry()输 ...

  10. PHP中类和对象的相关函数

    class_exists 判断一个类是否存在,参数为一个名字! interface_exists 判断一个接口是否存在,参数也是为一个名字! method_exists 判断一个方法是否存在! 需要两 ...