记一次内存泄漏调试(memory leak)-Driver Monkey
Author:DriverMonkey
Mail:bookworepeng@Hotmail.com
Phone:13410905075
QQ:196568501
硬件环境:AM335X
软件环境:linux 3.2
现象:1)系统执行一晚上,配置硬件操作失效
2)系统放置在那。没实用户输入会自己死机
调试过程:
第一步:分析硬件配置失效原因,怀疑配置硬件代码有问题
最后发现 代码 调用 system() 函数配置硬件没有调用成功 返回值 为 -1.
第二步: 继续上一步 分析 system() 在什么情况下会返回 -1,
查看system 源码,得出结论 system() 函数会调用 fork() 函数 仅仅有fork() 函数失败的时候会返回 -1
第三步:进一步分析 fork() 调用失败的原因。 fork() 绝大部分情况在申请不到足够内存时候会失败
到了这一步開始怀疑内存泄露引起的问题
第四步:验证内存泄露问题
1)执行应用程序,使程序负荷加到最大,用 free 查看内存使用情况
发现内存在以 5kb/s 的速度降低(到这一步能够全然确认是内存泄露)
2) 进一步验证发现系统内存仅仅剩下 8kb 左右系统会很卡。
最后内核会打印系统内存不足错误。
同一时候也有一定概率出现system() 函数调用失败情况
第五步:调试代码超出内存泄露代码
1)怀疑是 malloc() 后没有 free() 引起的 Leak
验证:在全部的malloc() 和 free()上包一层 并分别分配一个计数器,
发现计数器并没有随时间推移而添加。排除是malloc 和free 的问题。
2)怀疑系统中用的 c++ map string 这些全局对象有问
分别打印这些对象的 size() 发现size 也没有添加
到这一步调试有点陷入僵局。最后去了一趟茅厕。灵光一现是不是用的开源库,使用方法不正确引起的泄露问题
3)验证第二步的怀疑。
整个系统跑的最多的就是XML库
去掉xml 发现内存没有再降低。
定位出XML库的使用问题,又一次再逐条过一遍使用的API发现获取content的xml API 须要调用XMLfree 来手动释放。
总结:
因为曾经都是在嵌入平台开发。跑的到时单片机。dsp。系统基本不用动态申请内存。没有内存泄露调试经验
定位这个问题还是花了基本一天的时间。实际上每次问题的出现都是一个非常好的学习机会
记一次内存泄漏调试(memory leak)-Driver Monkey的更多相关文章
- 内存泄漏(Memory Leak)
内存泄露检测工具Valgrind 内存泄露简介 回到顶部 什么是内存泄漏 内存泄漏(Memory Leak)是指程序中已动态分配的堆内存由于某种原因,程序未释放或无法释放,造成系统内存的浪费,导致 ...
- OutOfMemoryError异常java内存泄漏(Memory Leak)和内存溢出(Memory Overflow)
本篇文章理解源自于<深入理解java虚拟机>2.4章节 实战:OutOfMemoryError异常 在以下例子中,所有代码都可以抛出OutOfMemoryError异常,但是要区分到底 ...
- 内存泄漏(memory leak)和内存溢出
1. 什么是内存泄漏(memory leak)? 指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况.内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存 ...
- Android 内存管理 &Memory Leak & OOM 分析
1.Android 流程管理&内存 Android主要应用在嵌入式设备其中.而嵌入式设备因为一些众所周知的条件限制,通常都不会有非常高的配置,特别是内存是比較有限的. 假设我们编写的代 码其中 ...
- java 基础知识学习 内存泄露(memory leak) VS 内存溢出(out of memory)以及内存管理
内存泄露(memory leak) VS 内存溢出(out of memory) 内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory ...
- python 内存泄漏调试
Python应用程序内存泄漏的调试 Quake Lee quakelee@geekcn.org 新浪网技术(中国)有限公司 Sina Research & Development Python ...
- 【转】Android之内存泄漏调试学习与总结
大家有或经常碰到OOM的问题,对吧?很多这样的问题只要一出现相信大家的想法跟小马的一样,就是自己的应用:优化.优化.再优化!而且如果出现类似于OOM这样级别的问题,根本就不好处理,LogCat日志中显 ...
- Android 内存优化 (防Memory Leak)
在之前的 Android 内存管理 &Memory Leak & OOM 分析 中,说到了Android的内存管理相关的原理,也能了解到Android Memory Leak 和 ...
- AndroidStudio 内存泄漏分析 Memory Monitor
ok.写一段内存泄漏的code private TextView txt; @Override protected void onCreate(Bundle savedInstanceState) { ...
随机推荐
- call() 和 apply() 的作用和区别
call, apply都属于Function.prototype的一个方法,它是JavaScript引擎内在实现的,因为属于Function.prototype,所以每个Function对象实例,也就 ...
- BZOJ 1231 状压DP
思路: f[i][j] i表示集合的组成 j表示选最后一个数 f[i][j]表示能选的方案数 f[i|(1<< k)][k]+=f[i][j]; k不属于i j属于i且符合题意 最后Σf[ ...
- Android java.lang.NoSuchFieldError: No static field xxx of type I in class Lcom/XX/R$id; or its superclasses
项目开发快到尾声,突然发现之前一个模块莫名其妙的奔溃了,我的内心也是奔溃的.以前一直都是好好的,也没去动过它,为啥会出现这样的问题呢? 下面我会根据自己的理解来看待问题 android是怎么根据id查 ...
- HTML5多维度数据分析
详情:http://echarts.baidu.com/index.html
- ELK+KAFKA安装部署指南
一.ELK 背景 通常,日志被分散的储存不同的设备上.如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志.这样是不是感觉很繁琐和效率低下.当务之急我们使用集中化的日志管理,例如: ...
- android基于开源网络框架asychhttpclient,二次封装为通用网络请求组件
网络请求是全部App都不可缺少的功能,假设每次开发都重写一次网络请求或者将曾经的代码拷贝到新的App中,不是非常合理,出于此目的,我希望将整个网络请求框架独立出来,与业务逻辑分隔开,这样就能够避免每次 ...
- absolute、relative,toggle()
測试代码例如以下: <div> <div class="global">不应用样式</div> <div class="glob ...
- ELKstack 中文指南
https://www.elastic.co/downloads ELKstack 中文指南 .net Elasticsearch 学习入门笔记 一. es安装相关1.elasticsearch安 ...
- 团队作业-Beta冲刺(3)
这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass2 这个作业要求在哪里 https://edu.cnblo ...
- 洛谷 P1480 A/B Problem
P1480 A/B Problem 题目描述 输入两个整数a,b,输出它们的商(a<=10^5000,b<=10^9) 输入输出格式 输入格式: 两行,第一行是被除数,第二行是除数. 输出 ...