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

一、 要问调试程序遇到什么问题最头疼, 内存泄露肯定能排在前几名里的。  内存泄露一般是由于 在申请、释放内存的过程中,并没有将其正确的结对使用。 出现了申请了内存,但是未释放或者少释放了内存的情况。   内存泄露问题的出现,可能短时间内不会造成很大的影响。但是如果长时间运行程序, 内存会被逐步蚕食殆尽。 而造成服务器(主机)工作异常的情况,严重的造成其他程序没法正常工作,甚至宕机的情况。

二、遇到、发现内存泄露

内存泄露的问题,肯定不是一眼就看出来的。这个一般是长期观察, 或者某种情况重复执行,并查看内存的使用情况,发现内存可用值逐步变少。而且停止该情况的执行后,内存使用率并不恢复。 此时, 出现内存泄露的问题的可能性就很大了。

三、找到内存泄露的必要条件

发现内存泄露了。最重要的是找到内存泄露的必要条件。最好是找到最一针见血的泄露条件。这个过程可能会比较长,如果情况较简单的话还好说。 几种条件试下来 基本上就能摸个差不多了! 但是如果碰到较复杂的情况,那么需要多钟条件组合测试。 得出最根本的那个导致泄露的条件,成功就不远了!

四、找到内存泄露的代码

有了问题必现的条件, 那么接下来就得跟代码了(废话。。。)。 根据条件的处理过程一点点缕代码, 查看内存的分配及释放情况。查看是否有少释放的情况。 不过这种方法是最笨的方法。

(1)介绍一个工具valgrind,虽然在我的debug 阶段并未给予太大的帮助,而且还帮了点倒忙。但不妨碍要夸它是一款 很好的跟踪内存问题的工具。

说说它的优点:

不用向代码里特意插入新的跟踪代码。 仅在编译可执行程序时加入 -g 选项。 就可以使用valgrind 工具对其进行 内存调试啦。 方法还算简单些。

但是有一点, 在我使用的程序中,是一个大循环。且是一个后台守护进程。  使用valgrind 就有点不方便了! 必现条件执行一次,非常之慢。。。 所以根据你的程序实际使用情况,甄别选用。如果没有其他思路的时候,可以使用该工具跑一下,没准就解决了呢!

(2) 笨办法 在调用malloc/new, free/delete 等申请、释放内存的函数处,打印申请过程和一些基本信息(申请空间的大小,地址,也可以使用一个全局变量记下申请、释放的次数)。以便观察哪块有申请后,但没有找到对应的释放地方。

总结来讲, 解决内存泄露没有非常便捷的办法。  预防方法就是规范自己的代码编写, 做好成对的申请与释放。 在处理异常情况返回、退出时记得释放之前申请的内存。养成编码的好习惯。   或者架构软件代码时,可以将内存申请、释放函数封装一下, 增加自己的调试信息进去。多一些必要的调试信息对解决问题有很大的帮助。

出了内存泄露问题也不要太焦虑。没法快速解决问题也不要着急。 如果不是那种一眼就看出来就有泄露的地方, 基本上花费的时间都不会短。所以保持自己debug的热情,别气馁。  一般棘手问题的解决办法大多都是 缺了那么几行代码。找到解决办法后,也不要觉得自己菜鸟。 认为这么简单的问题花费了好长的时间 。 重要的是解决问题的过程。 每解决一个问题,你就进步了一次。

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

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

linux 内存泄露检测工具

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

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

1. 内存使用情况分析 1.1 系统总内存分析 通过cat /proc/meminfo,可用的物理内存=M ...

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

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

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

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

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

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

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

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

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

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

Linux下利用Valgrind工具进行内存泄露检测和性能分析

from http://www.linuxidc.com/Linux/2012-06/63754.htm Valgrind通常用来成分析程序性能及程序中的内存泄露错误 一 Valgrind工具集简绍 ...

随机推荐

原生js可爱糖果数字时间特效

效果展示:http://hovertree.com/texiao/js/35/ 数字采用漂亮的糖果皮肤设计 效果图: 代码如下: ...

html+css基础知识总结

1.HTML书写的基本规范      img标签必须得写alt=""      标签名和属性名字必须小写      引号必须用双引号      双标签必须有闭合标签      单标 ...

04-时序逻辑电路设计之计数器——小梅哥FPGA设计思想与验证方法视频教程配套文档

芯航线--普利斯队长精心奉献 实验目的:以计数器为例学会简单的时序逻辑电路设计 实验平台:芯航线FPGA核心板 实验原理: 时序逻辑电路是指电路任何时刻的稳态输出不仅取决于当前的输入,还与前一时刻输入 ...

javascript笔记:流程控制语句

一.条件语句 1.if语句 if 语句即条件判断语句,一共有三种格式: (1)if (条件表达式) 语句: var box = 100; if (box >50) { alert('box大于5 ...

【BZOJ】1089: [SCOI2003]严格n元树(递推+高精度/fft)

http://www.lydsy.com/JudgeOnline/problem.php?id=1089 题意:求深度为d的n元树数目.(0

oracle事务和锁

数据库事务概括 1. 说明 一组SQL,一个逻辑工作单位,执行时整体修改或者整体回退. 2.事务相关概念 1)事务的提交和回滚:COMMIT/ROLLBACK 2)事务的开始和结束 开始事务:连接到数 ...

ansible 下lineinfile详细使用

ansible 下lineinfile详细使用 时间 2016-12-13 18:02:31  51CTO推荐博文 原文  http://zouqingyun.blog.51cto.com/78224 ...

以太坊—P2P网络

Chord算法 1.Chord 概念 Chrod算法是P2P中的四大算法之一,是有MIT(麻省理工学院)于2001年提出 . Chord的目的是提供一种能在P2P网络快速定位资源的的算法,Chord并 ...

Python 爬虫入门(一)

毕设是做爬虫相关的,本来想的是用java写,也写了几个爬虫,其中一个是爬网易云音乐的用户信息,爬了大概100多万,效果不是太满意.之前听说Python这方面比较强,就想用Python试试,之前也没用过 ...

matlab求逆运算:左除( \ )和右除( / ),inv,pinv

矩阵求逆可以使用左除(\)和右除(/),inv,pinv 首先了解需要求逆的矩阵A是否为奇异方阵 inv 若A为非奇异方阵,则存在逆矩阵,可利用inv求逆: inv(A) pinv 若需要求逆的矩阵A ...

linux注入内存泄露,Linux 内存泄露小结相关推荐

  1. 防止内存泄露 Linux下用Valgrind做检查

    Valgrind技术参考 http://valgrind.org/docs/manual/tech-docs.html 防止内存泄露 Linux下用Valgrind做检查 发布时间:2007.10.2 ...

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

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

  3. linux下内存的统计和内存泄露问题的定位-转

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

  4. 防止内存泄露 Linux下用Valgrind做检查【ZT】

    用C/C++开发其中最令人头疼的一个问题就是内存管理,有时候为了查找一个内存泄漏或者一个内存访问越界,需要要花上好几天时间,如果有一款工具能够帮助我们做这件事情就好了,valgrind正好就是这样的一 ...

  5. #内存泄露# linux常用内存相关命令

    Table of Contents free命令 vmstat命令 top命令 cat /proc/meminfo ps aux命令 free命令 free 命令会显示系统内存的使用情况,包括物理内存 ...

  6. Linux 下几款程序内存泄漏检查工具

    Linux 下几款程序内存泄漏检查工具 chenyoubing | 发布于 2016-07-23 10:08:09 | 阅读量 93 | 无 写这篇博客的原因呢是因为自己在编写基于Nginx磁盘缓存管 ...

  7. linux内存专题,linux内存浅析

    前言: 内存是linux中很重要的一块,内存不足.内存泄漏.内存溢出也是在测试项目中经常会遇到的问题. 1. 物理内存和虚拟内存 内存的读写性能要比硬盘快的多,因此,在设计上会充分利用内存进行数据的读 ...

  8. Linux 内核漏洞暴露栈内存,造成数据泄露

     聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士 思科 Talos 团队最近在 Linux 内核中发现了一个信息泄露漏洞 (CVE-2020-28588). Linux 内核是类 Unix ...

  9. Linux查看CPU使用率、内存使用率等

    一.CPU使用率查看 1. cat /proc/loadavg命令 $ cat /proc/loadavg 0.08 0.06 0.10 1/442 8347 前三项分别是最近1分钟.5分钟和15分钟 ...

最新文章

  1. 三级计算机网络技术考试题,2017年计算机三级网络技术考试题
  2. 《算法设计与分析基础》Chapt 2 算法效率分析基础
  3. 走台阶一共有多少种走法
  4. Java-Super
  5. linux nginx添加php版本号,linux伪装隐藏Nginx,PHP版本号提升服务器安全性
  6. 46张PPT彻底弄懂JVM、GC算法和性能调优!
  7. 线性插值 多项式插值 样条插值 牛顿插值总结
  8. 如何在HTML中使用JavaScript代码
  9. 「首席看点」也许敏捷就是问题所在
  10. 如何用python做比分网_使用python对历届世界杯进行数据分析
  11. Redis的前前后后左左右右
  12. c语言分桃分题设计思路,C语言实现的猴子分桃问题算法解决方案
  13. uni-app 微信小程序 选取地区取到区
  14. redis 源码分析 跳表实现
  15. 欧拉角的概念理解和欧拉角旋转矩阵推导
  16. android指定sim卡拨号,android – 在双SIM卡设备中使用指定的SIM拨打电话
  17. 数位板怎么用?刚开始使用数位板要从什么开始练习
  18. 基于FPGA的双极性DDS设计与仿真
  19. solidity 基础讲解
  20. monkey命令_随机测试工具猴子monkey

热门文章

  1. 深入了解JavaScript对象(2)--函数、对象
  2. React文档(六)state和生命周期
  3. Activity的4种启动模式
  4. Extjs Form用法详解(适用于Extjs5)
  5. ASP.NET MVC3细嚼慢咽---(2)模板页
  6. 函数式思维: 利用 Either 和 Option 进行函数式错误处理 类型安全的函数式异常...
  7. RFC 4303--ESP
  8. awk - 模式扫描与处理语言
  9. 别忘了,明天是BCH的压力测试日
  10. Ajax基础知识梳理