• 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

  • 相关阅读:
    磊哥评测之数据库:腾讯云MongoDB vs自建
    一文看透浏览器架构
    必看!如何让你的LBS服务性能提升十倍!
    亿级曝光品牌视频的幕后设定
    Node 框架接入 ELK 实践总结
    大数据与 AI 生态中的开源技术总结
    数据库分片(Database Sharding)详解
    QQ音乐的动效歌词是如何实践的?
    Sql Server之旅——第九站 看公司这些DBA们设计的这些复合索引
    Sql Server之旅——第八站 复合索引和include索引到底有多大区别?
  • 原文地址:https://www.cnblogs.com/wanggang123/p/13863848.html
Copyright © 2020-2023  润新知