本文仅限记录自己的一次 内存泄露追踪小记。 可能并不十分适用与大家的情况。而且方法也并不是很smart。仅做记录,能提供个思路更好。 

 
    一、 要问调试程序遇到什么问题最头疼, 内存泄露肯定能排在前几名里的。  内存泄露一般是由于 在申请、释放内存的过程中,并没有将其正确的结对使用。 出现了申请了内存,但是未释放或者少释放了内存的情况。   内存泄露问题的出现,可能短时间内不会造成很大的影响。但是如果长时间运行程序, 内存会被逐步蚕食殆尽。 而造成服务器(主机)工作异常的情况,严重的造成其他程序没法正常工作,甚至宕机的情况。
 
    二、遇到、发现内存泄露
    内存泄露的问题,肯定不是一眼就看出来的。这个一般是长期观察, 或者某种情况重复执行,并查看内存的使用情况,发现内存可用值逐步变少。而且停止该情况的执行后,内存使用率并不恢复。 此时, 出现内存泄露的问题的可能性就很大了。
 
    三、找到内存泄露的必要条件
    发现内存泄露了。最重要的是找到内存泄露的必要条件。最好是找到最一针见血的泄露条件。这个过程可能会比较长,如果情况较简单的话还好说。 几种条件试下来 基本上就能摸个差不多了! 但是如果碰到较复杂的情况,那么需要多钟条件组合测试。 得出最根本的那个导致泄露的条件,成功就不远了!
 
    四、找到内存泄露的代码
    有了问题必现的条件, 那么接下来就得跟代码了(废话。。。)。 根据条件的处理过程一点点缕代码, 查看内存的分配及释放情况。查看是否有少释放的情况。 不过这种方法是最笨的方法。
 
    (1)介绍一个工具valgrind,虽然在我的debug 阶段并未给予太大的帮助,而且还帮了点倒忙。但不妨碍要夸它是一款 很好的跟踪内存问题的工具。
 
    具体的使用方法可以参考 IBM 大神的文章 http://www.ibm.com/developerworks/cn/linux/l-cn-valgrind/ 
 
    说说它的优点:
        不用向代码里特意插入新的跟踪代码。 仅在编译可执行程序时加入 -g 选项。 就可以使用valgrind 工具对其进行 内存调试啦。 方法还算简单些。
 
    但是有一点, 在我使用的程序中,是一个大循环。且是一个后台守护进程。  使用valgrind 就有点不方便了! 必现条件执行一次,非常之慢。。。 所以根据你的程序实际使用情况,甄别选用。如果没有其他思路的时候,可以使用该工具跑一下,没准就解决了呢!
 
    (2) 笨办法 在调用malloc/new, free/delete 等申请、释放内存的函数处,打印申请过程和一些基本信息(申请空间的大小,地址,也可以使用一个全局变量记下申请、释放的次数)。以便观察哪块有申请后,但没有找到对应的释放地方。
 
 
    总结来讲, 解决内存泄露没有非常便捷的办法。  预防方法就是规范自己的代码编写, 做好成对的申请与释放。 在处理异常情况返回、退出时记得释放之前申请的内存。养成编码的好习惯。   或者架构软件代码时,可以将内存申请、释放函数封装一下, 增加自己的调试信息进去。多一些必要的调试信息对解决问题有很大的帮助。
    出了内存泄露问题也不要太焦虑。没法快速解决问题也不要着急。 如果不是那种一眼就看出来就有泄露的地方, 基本上花费的时间都不会短。所以保持自己debug的热情,别气馁。  一般棘手问题的解决办法大多都是 缺了那么几行代码。找到解决办法后,也不要觉得自己菜鸟。 认为这么简单的问题花费了好长的时间 。 重要的是解决问题的过程。 每解决一个问题,你就进步了一次。

Linux 内存泄露小结的更多相关文章

  1. Linux内存分配小结--malloc、brk、mmap【转】

    转自:https://blog.csdn.net/gfgdsg/article/details/42709943 http://blog.163.com/xychenbaihu@yeah/blog/s ...

  2. linux 内存泄露 valgrind

    内泄漏工具 valgrind: https://linux.die.net/man/1/valgrind www.valgrind.org/docs/manual/index.html www.val ...

  3. linux 内存泄露检测工具

    Valgrind Memcheck 一个强大开源的程序检测工具 下载地址:http://valgrind.org/downloads/current.html Valgrind快速入门指南:http: ...

  4. Linux内存使用情况以及内存泄露分析之工具与方法

    <Linux C/C++ Memory Leak Detection Tool> 1. 内存使用情况分析 1.1 系统总内存分析 通过cat /proc/meminfo,可用的物理内存=M ...

  5. Linux内存使用情况以及内存泄露情况

    1. 内存使用情况分析 http://www.360doc.com/content/15/1118/13/17283_514054063.shtml https://www.linuxidc.com/ ...

  6. linux下内存泄露检测工具Valgrind介绍

    目前在linux开发一个分析实时路况的应用程序,在联合测试中发现程序存在内存泄露的情况. 这下着急了,马上就要上线了,还好发现了一款Valgrind工具,完美的解决了内存泄露的问题. 推荐大家可以使用 ...

  7. Linux kernel 内存泄露本地信息泄露漏洞

    漏洞名称: Linux kernel 内存泄露本地信息泄露漏洞 CNNVD编号: CNNVD-201311-467 发布时间: 2013-12-06 更新时间: 2013-12-06 危害等级:    ...

  8. linux下内存的统计和内存泄露类问题的定位

    在产品的开发中,通过对当前系统消耗内存总量的统计,可以对产品所需内存总量进行精确的评估,从而选择合适的内存芯片与大小,降低产品的成本.在遇到内存泄露类问题时,经常会对此束手无策,本文通过对proc下进 ...

  9. 利用linux的mtrace命令定位内存泄露(Memory Leak)

    一谈到内存泄露, 多数程序猿都闻之色变. 没错, 内存泄露非常easy引入. 但非常难定位.  以你我的手机为例(如果不常常关机). 如果每天泄露一些内存, 那么開始的一个星期, 你会发现手机好好的. ...

随机推荐

  1. MPI - 缓冲区和非阻塞通信

    转载自: Introduction to MPI - Part II (Youtube) Buffering  Suppose we have ) MPI_Send(sendbuf,...,,...) ...

  2. 我是如何从一个xss到某个浏览器的远程命令执行

    0x01 前言:其实我是个小白平时就喜欢瞎搞,无意间碰到一个浏览器就想一探究竟,好了废话不多说开始!!! 0x02 可以看到我打开的新标签是怎么一个链接页面,既然是页面我是不可以XSS它呢? 于是我就 ...

  3. redisson实现基于业务的互斥锁

    虽然数据库有锁的实现,但是有时候对于数据的操作更需要业务层控制. 这个解决的问题有次面试被问到过,当时不知道怎么解决,乱说一通,今天也算是有个解决方案了 项目中有个需求,就是订单需要经过一层一层的审核 ...

  4. 区间DP--凸多边形三角剖分

    给定一个具有N(N<50)个顶点(从1到N编号)的凸多边形,每个顶点的权均已知.问如何把这个凸多边形划分成N-2个互不相交的三角形,使得这些三角形顶点的权的乘积之和最小? 输入文件:第一行 顶点 ...

  5. python开发_email_读取邮件头信息

    在python中的类库中,python自带了email模块. 在email模块中,我们可以email类库实现对邮件的读取,和邮件的发送等功能. 本文先来谈谈在python中,利用email模块读取邮件 ...

  6. sql中字符分割,日期判断,以及函数的应用

    前两天公司有一个功能需求,客户给出几天的工作时间和休息,然后顾客的访问时间必须要在工作时间之内和休息时间之外,所以要求做一下判断.本来以为这个没什么,谁知道客户提供的工作时间段和休息时间段不定,给出的 ...

  7. 使用JS在客户端判断当前网络状态

    1. navigator.onLine 2. ajax请求 3. 获取网络资源 1. navigator.onLine 通过navigator.onLine判断当前网络状态: 12345 if(nav ...

  8. jQuery:validate表单验证基本使用

    jquery.validate是jquery的一个验证框架,可以迅速验证一些常见的输入,并且可以自己扩充自己的验证方法! 这里先从介绍简单的使用方法:jquery.validate.js下载地址 1. ...

  9. 树状数组求第K小值 (spoj227 Ordering the Soldiers &amp;&amp; hdu2852 KiKi&#39;s K-Number)

    题目:http://www.spoj.com/problems/ORDERS/ and pid=2852">http://acm.hdu.edu.cn/showproblem.php? ...

  10. Unity3d地图制作之模型高光

    由于颇受暗黑破坏神美工的影响,最近都在研究怎么制作场景地图之类的. 那么今日讲的模型高光虽然和地图无关,但是也涉及到一些美工的知识,尤其是shader. 按照国际惯例,先贴一张图饱饱眼福. 大家可以看 ...