zoukankan      html  css  js  c++  java
  • 内存泄漏和检测方法

    一、内存泄漏概念

      动态申请的内存(new、malloc等),没有进行释放处理;在程序持续运行过程中,占用的系统内存会越来越多。

    二、泄漏检测方法

    1.检测之valgrind

    // 编译添加–g参数
    //valgrind --leak-check=full --show-reachable=yes --trace-children=yes ./ttsTestMain 
    valgrind --tool=memcheck ./ttsTestMain 执行结果: ==29653== ==29653== HEAP SUMMARY: ==29653== in use at exit: 6,621 bytes in 65 blocks ==29653== total heap usage: 179 allocs, 114 frees, 2,412,787 bytes allocated ==29653== ==29653== LEAK SUMMARY: ==29653== definitely lost: 0 bytes in 0 blocks ==29653== indirectly lost: 0 bytes in 0 blocks ==29653== possibly lost: 0 bytes in 0 blocks ==29653== still reachable: 6,621 bytes in 65 blocks ==29653== suppressed: 0 bytes in 0 blocks ==29653== Rerun with --leak-check=full to see details of leaked memory ==29653== ==29653== For counts of detected and suppressed errors, rerun with: -v ==29653== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)

    2.检测之tcmalloc

    依赖库:libunwind-1.1  gperftools

    通过 LD_PRELOAD 设置链接的堆栈处理库
    通过 HEAPPROFILE 设置生成分析文件的位置

    设置环境记录到文件:
    env LD_PRELOAD="/home/app4/e2e_Tts/lib/tcmalloc/libtcmalloc.so" HEAPPROFILE="./perf_log/perf_leak.log" ./ttsTestMain

    查看文件信息:
    pprof --text /usr/bin/ls ./perf_log/perf_leak.log.0020.heap  # 读取 heap 转化成分析结果

    直接打印:
    env PPROF_PATH=./pprof HEAPCHECK=normal ./ttsTestMain

     


    • 首先终端输入export PPROF_PATH=/usr/local/bin/pprof
    • 将tcmalloc库链接到程序中,注意应该将tcmalloc库最后链接到程序中;
      • 如果直接使用gcc编译,则使用-ltcmalloc链接
      • 如果使用cmake,则在target_link_libraries中添加tcmalloc
    • 重新编译程序
    • 运行 env HEAPCHECK=normal 程序名 即可检查程序是否有内存泄露

    3.检测之函数重载

    C++环境下,我们通过new操作来申请内存,通过delete操作来释放内存,所以如果能够改写默认的new和delete操作的行为,就可以检测内存的状态。
    参考:https://www.jianshu.com/p/060063f91f5e
    问题:使用vector.pushback时core,待后续分析
    ====待补充
  • 相关阅读:
    10 个最佳的网站分析方法
    网站优化:测试网站速度的8款免费工具推荐
    8 个最棒的 .NET 开发相关工具
    10 个文件和文档的比较工具
    asp.net中调用javascript自定义函数的方法(包括引入JavaScript文件)总结
    如何在ashx页面获取Session值
    java-信息安全(十一)-非对称加密算法ECC
    java-信息安全(十)-数字签名算法DSA
    java-信息安全(九)-基于DH,非对称加密,对称加密等理解HTTPS
    java-信息安全(八)-迪菲-赫尔曼(DH)密钥交换
  • 原文地址:https://www.cnblogs.com/cyblogs/p/13534724.html
Copyright © 2011-2022 走看看