zoukankan      html  css  js  c++  java
  • 用Performance Monitor检测程序是否存在memory leak

    关于内存泄露,一般用Performance Monitor监测以下几个指标.

    #1 Process/Private Bytes,

    #2 .NET CLR Memory/# Bytes in All Heaps,

    #3 .NET CLR LocksAndThreads/# of current logical Threads.

    如果#1持续增长, 但是 #2保持平稳, 那么很可能有unmanged泄露. 如果 1和 2都持续增长,那么很可能有managed泄露. 如果#3有异常的增长, 那么泄露可能发生在线程的栈上. 在任务管理器里Process页看到的Memory一般是指working set,这个一般不用来作为内存泄露的依据。简单来说它只是表示当前程序在物理内存里面占了多少空间,和当前程序要用多少内存是两码事。

    下面详细介绍使用Performance Monitor收集相关的测试数据

    1. 打开Start -> Control Panel->Administrative Tools->Performance Monitor (或者直接在命令行上输perfmon, 回车)

    2. 在左边找到Data Collector Sets -> User Defined,右键选择New -> Data Collect Set

    3. 在弹出的对话框中填入名字,比如MySampleMemoryLeak, 下面的Radio Box 选Create Manually(advanced), 点Next

    4. 选择Create data logs, 勾上Performance Counter, 点Next.

    5. 点Add, 然后依次添加我们我们前面提到的三个指标。选择相关的Performance Counter,以及我们要监测的程序,点”Add>>”。三个都添加完成后点击OK。

    PF_thumb

    6. 有需要的话可以调整一下抓数据的间隔时间,点Next.

    7. 选择你想存放数据的路径,点Next, 点Finish.

    8. 在右边的DataCollector01上面右键,选属性. 在Performance Counters页面的Log format选项下面选择”Comma Separated”(这样你就可以产生.csv文件,然后可以利用word生成直观的图表),点OK.

    至此,我们所需的Performance Counter已经创建完毕。

    接下来,我们可以启动要测试的程序,warm up之后就可以开始监测。在Performance Monitor里面选择刚才建的MySampleMemoryLeak,然后在工具栏上选开始(或者脚本运行命令"logman start MySampleMemoryLeak”),然后在我们的程序里面跑需要检测是否有内存泄露的scenario,跑完以后在Performance Monitor里面停止MySampleMemoryLeak的监视(或者脚本运行命令"logman stop MySampleMemoryLeak”)

    最后,我们可以打开csv文件,根据里面的数据生成图表,根据其增长趋势,判断有没有内存泄露以及是哪一类型的泄露。

  • 相关阅读:
    maven打包成jar文件与打包成tar.gz文件
    maven命令错误:-Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME
    Nginx监听多个端口配置实例 Linux
    怎么修改redis-cli访问的地址
    eclipse的.properties文件中文显示问题
    Linux关闭防火墙命令red hat/CentOs7
    CentOS 7防火墙快速开放端口配置方法
    Window下Beego环境搭建和bee工具使用
    .netcore2.1 使用middleware对api请求头进行验证
    .netcore2.1 统一接口返回属性名称
  • 原文地址:https://www.cnblogs.com/fbird/p/3615306.html
Copyright © 2011-2022 走看看