zoukankan      html  css  js  c++  java
  • linux 下 定位内存泄漏 valgrind

          排查项目中遇到的内存泄露问题,用到valgrind工具,记录下具体的用法以及注意事项,以备后用。

    首先要明确的是valgrind 是可靠的:刚开始使用valgrind测试出一些内存泄漏点,通过代码发现及日志跟

    踪,发现流程上“没有问题”,一度怀疑valgrind 是不是报告假消息。后来所有报出来的泄漏点均证实确实

    存在泄露。 下面介绍下valgrind基本使用方法:

          如果系统没有安装valgrind,首先得安装下,我们测试的系统是Ubuntu16.04,直接 sudo apt-get install 

    valgrind  在命令行如下命令:

    root@Ubuntu16:~# valgrind --tool=memcheck --leak-check=full  --show-reachable=yes --log-file=./mem.txt ./CGServer

          程序运行一段程序后结束程序运行,查看生成的文件(上面的命令指定了日志文件名为mem.txt),示例日志

    文件内容 如下图所示:

                     

                                                                        图1. 示例日志内容

            需要注意的是提示still reachable的地方 也有可能是泄露点。still reachable 原意是仍然可以被释放,如果是

    库初始化处提示still reachable 没有问题,因为只有程序不退出,不能被释放。如果被反复调用的接口处也提示

    still reachable 基本上都属于内存泄露,需要解决。

         另外调用malloc分配的内存 free后内存不一定会立即交还操作系统,glibc有自己的内存管理机制。默认分配超

    过128K的内存,free后会内存会立即交还操作系统(这个阈值可通过mallopt接口设置M_MMAP_THRESHOLD进

    行修改)。小于128K先缓存起来,适当的时候释放。如果希望尽快释放内存可执行mall_trim(0)(可单独开启一个线

    程定时执行该方法,该方法可释放本进程内其他线程free后的内存(交还操作系统))。 相比之下Windows系统下

    内存释放没有这个问题调用free接口后一定是及时释放内存的。

         linux下 查看程序占用的内存可通过 top -p 进程Pid  命令进行查看,整体上该命令输出的进程内存信息是准确的,

    通过该命令查看进程内存如果进程占用内存一直增加 一定是有问题的。

       

    如需交流可加QQ群766718184,1038388075 或者QQ3501870,

    视频下载地址:http://www.chungen90.com/?news_3/

     Demo下载地址: http://www.chungen90.com/?news_2

  • 相关阅读:
    【原】 POJ 1308 Is It A Tree? 并查集树结构 解题报告
    终于决定投身Linux怀抱
    Inside the C++ Object Model
    Fedora 下 OpenCV 的安装
    sed 与 awk
    工具链接收藏
    [转] 计算机视觉领域稍微容易中的期刊
    QtCreator开发多文档编辑器(Project 1)
    Fedora 17: Grub Rescue
    做文档类的工作总是让我感到一些烦躁
  • 原文地址:https://www.cnblogs.com/wanggang123/p/13863848.html
Copyright © 2011-2022 走看看