记一次内存泄漏调试(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) { ...
随机推荐
- java poi操作excel示例代码
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io ...
- 洛谷P3531 [POI2012]LIT-Letters
题目描述 Little Johnny has a very long surname. Yet he is not the only such person in his milieu. As it ...
- POJ 2981 Strange Way to Express Integers 模线性方程组
http://poj.org/problem?id=2891 结果看了半天还是没懂那个模的含义...懂了我再补充... 其他的思路都在注释里 /********************* Templa ...
- 图片上传5-多个图片上传,独立项目Demo和源码
图片上传,一次性可以上传多个图片,每个图片可以有名字.URL.排序.备注等字段.这是区别于使用百度WebUploader等多图上传工具的地方. 项目相关图片 Jar包管理:Maven用到的框架:Spr ...
- 【Uva 10163】Storage Keepers
[Link]: [Description] 你有n(n≤100)个相同的仓库.有m(m≤30)个人应聘守卫,第i个应聘者的能力值 为Pi(1≤Pi≤1000).每个仓库只能有一个守卫,但一个守卫可以看 ...
- system.setting-全局变量数据监听
今天在setting里添加了一个新的变量,想要实现对这个变量的监听.现在记录下方法 首先就是明白一点,我们在system.setting里添加的变量,都会被保存在data/data/com.andro ...
- Android开发经验之点击图片判断是否在图片范围之内
package xiaosi.grivaty; import android.content.Context; import android.graphics.Bitmap; import andro ...
- div+css制作表格
html: <div class="table"> <h2 class="table-caption">花名册:</h2> ...
- iTOP-4412 nfs文件系统启动
kernel command line type: 普通文件系统(本地)启动:root=/dev/mmcblk0p2 rootfstype=ext4 init=/linuxrc console=tty ...
- Express简介、安装
Express 基于Node.js平台,快速.开放.极简的web开发框架,是目前最流行的基于Node.js的web开发框架,它提供一系列强大的功能,比如: 路由控制 参数获取 send和sendFil ...