使用VTune分析内存及寻找内存泄漏

在Intel VTune Profiler提供了基于事件的内存消耗分析方法(Memory Consumption Analysis)。如果还不清楚VTune的使用方法,请移步使用Intel VTune Profiler进行性能分析及优化_天寒寒的博客-CSDN博客

该内存分析方法分析的目标是linux本地进程或者JAVA,python目标。如果是基于DPDK这种预先从大页当中分配一块内存,然后通过自身的内存管理办法再进行内存分配和释放的应用程序,该方法是无法进行捕获和分析的。

内存消耗分析方法可以探索程序随时间推移的内存消耗,以及运行期间分配和释放的内存对象。在分析期间,VTune的数据收集器会拦截内存分配和释放事件,并捕获每个事件的调用堆栈(对于内存释放,只捕获释放内存的函数)。VTune将调用指令指针与调用堆栈一起存储在数据收集文件中,然后分析该数据并将其结果以图形化形式展示。

只需要简单的三步配置,即可开启内存分析。

1. 打开vtune,在WHERE选项里选择Remote Linux, 配置linux账户及IP,软件会自动部署VTune数据收集器。

2. 在WHAT里面选择Luanch Application,加载并运行demo程序。如果要分析一个正在运行的进程,请选择Attach to Process进行分析。

3. 在HOW里面选择Memory Consumption,默认要跟踪的最小动态内存大小为32字节,可以自行配置想要的数值,不过数值越小检测时的运行开销就越大。

点击运行,很快就能得到结果。

示例程序1:

#include <stdio.h>

int main()
{
    int i;
    int *a = (int *)malloc(1024 * sizeof(int));
    for(i = 0; i < 1024; i ++)
        a[i] = i + 1;
    return 0;
}

在示例程序1里,我分配了4k的内存,在程序结束的时候没有释放,Memory Consumption Analysis得到的结果为:内存分配大小为4K,内存释放大小为0,(分配 - 释放) 差值为4,有内存泄漏情况。

示例程序2:

#include <stdio.h>

int main()
{
    int i;
    int *a = (int *)malloc(1024 * sizeof(int));
    for(i = 0; i < 1024; i ++)
        a[i] = i + 1;
    free(a);
    return 0;
}

在示例程序2里面,把内存释放free()给加上了,运行后得到的结果为:内存分配大小为4K,内存释放大小为4K,(分配 - 释放) 差值为0B,没有内存泄漏。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值