如何利用Perfmon检测内存泄露
1、造成内存泄露的原因
内存泄露的原因有很多,常见的包括:
分配完内存后忘回收了;
程序写法问题,导致没办法回收;
某些API函数使用不正确,导致内存泄露;
未及时释放;
2. 利用Perfmon检测内存泄露
Perfmon是windows自带的一个性能监控工具,它在进行性能测试时的性能监控非常有用,且使用它提供的计数器日志记录功能,可以方便的记录测试过程中某些对象的性能变化情况。
2.1 启动windows性能监视器
windows性能监视器启动方式分为两种:
方式一:在开始界面运行框输入:perfmon并回车;

windows性能监视器打开以后的初始界面如下:

默认监视的性能计数器只有%Processor Time,监控方式为动态监视,监视周期只有1分40秒时长。
方式二:开始->控制面板->管理工具->性能监视器。
2.2实时监控模式
利用Perfmon监控程序进程的Handle Count、Virtual Bytes和Working Set这3个计数器。Handle Count记录了进程当前打开的句柄个数,监视这个计数器有助于发现程序是否存在句柄类型的内存泄露;Virtual Bytes记录了程序进程在虚拟地址空间上使用的虚拟内存大小,Virtual Bytes一般总大于程序的Working Set,监视Virtual Bytes可以帮助发现一些系统底层的问题;Working Set记录了操作系统为程序进程分配的内存总量,如果这个值不断持续增加,而Virtual Bytes却跳跃式地增加,则很可能存在内存泄露问题。
下面举例监控unm2000程序是否存在内存泄露:
1、在视图区,点击右键,选择"添加计数器",出现如下图所示窗口。


2、从"添加计数器"窗口中,选择性能对象为"Process"(进程)。
3、从Process下拉列表中选择监视对象Handle Count、Virtual Bytes和Working Set。
4、选择需要监视的实例unm2000。
5、设置完毕,点击"添加"按钮和"确定"按钮,关闭窗口,即可实时监视选中的参数。

动态监视的缺点是:监视周期只有1分40秒时长,并且数据不能连续输出到文件中。不能做后续分析。
2.3连续跟踪统计模式
当需要对性能数据进行连续统计,并进行后续分析时,我们可以采用另外一种方式:启用计数器日志。下图展示了启用计数器日志的性能监视器窗口。

1、如上图所示,在右侧树图区右击"用户定义">"新建">"数据收集器集",打开创建新的数据收集器集对话框,名称设为"内存泄露数据收集器集",点选"手动创建",最后点击"下一步"按钮;

2、继续勾选"性能计数器",并点击"下一步"按钮;

3、如下图所示修改采样频率,再点击"添加"按钮:

4、在弹出的计数器选择对话框中如下选择:

5、点击"确定"按钮,回到创建新的数据收集器集对话框,再点击"下一步":

6、选择数据存储路径,并点击"完成"按钮,完成性能数据收集器设置;

7、在性能监视器对话框中,选中左侧树图区刚才创建的内存泄露数据收集器集,点击工具栏启动按钮,启动内存泄露数据收集器集。

8、在unm2000程序上进行相关测试操作,操作完毕,在性能监视器对话框中,选中左侧树图区刚才创建的内存泄露数据收集器集,点击工具栏停止按钮,停止内存泄露数据收集器集。
9、在左侧树图区点击报告->内存泄露数据收集器集,在右侧图形区选择右键菜单项"数据另存为",将性能监视数据导出为*.csv文件。

优点:可以设定采样频率,指定时长或者手工控制采样时长不间断地采集性能数据,并且可以多种格式存储数据,满足不同的需求,便于事后分析。
本文来自博客园,作者:晴云孤魂,转载请注明原文链接:https://www.cnblogs.com/cnhack/articles/17327683.html

浙公网安备 33010602011771号