对于服务器程序,在不停的运作中,如何去测试是否存在内存泄露,如果你的开发环境是在windows下,那么我们就可以使用windows自带的性能监视器来观察程序的性能。
使用此例子:
Test.c
int main()
{
while (true)
{
char *test = new char[100];
Sleep(100);
}
cin.get();
return 0;
}
循环申请堆空间
(1) 开始运行程序test
(2) 打开性能监视器(Performance Monitor)
(3) 使用性能监视器中的数据收集器,进行数据的收集
(4)创建自定义的数据收集,按下图步骤进行配置。
图1 右击用户定义->新建->数据收集器
图2 填写新建项目名称->手动创建->下一步
图3,选择性能计数器->下一步
图4,点击添加->下一步
图5,选择process(进程选项),processor(处理器),这里的选项由需要监听的属性而定,这里暂且监听的是测试程序该进程的相关属性。
图6,选择该进程需要监听的项目 通常需要监听的是:Handle Count(句柄数)、private Bytes(程序拥有的私有字节)、Virtual bytes(虚拟内存)、working set - private (这个值就是任务管理器里面的内存使用量)
图7,选择多长时间记录一次
图8,下一步
图9图10,选择记录数据用制表符进行分隔,为了能用execl进行统计
图11,开启监听
图12 用execl 打开目标目录下的文件
图13,用折线图进行统计
从图中working set-private上升的曲线可以确定此程序存在内存泄露。
当程序遇到内存泄漏,我们应该做的是去定位内存泄漏的位置,并解决它。请看下一章节。