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文件,根据里面的数据生成图表,根据其增长趋势,判断有没有内存泄露以及是哪一类型的泄露。

  • 相关阅读:
    boot.asm
    C talk
    C 数据类型
    Locks, Deadlocks, and Synchronization
    C++的RTTI 观念和用途
    setup.asm
    驱动对象设备对象设备栈
    JNI 内存泄漏
    KMP 字符串匹配算法
    解开 Windows 下的临界区中的代码死锁
  • 原文地址:https://www.cnblogs.com/fbird/p/3615306.html
Copyright © 2011-2022 走看看