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的更多相关文章

  1. 内存泄漏(Memory Leak)

    内存泄露检测工具Valgrind   内存泄露简介 回到顶部 什么是内存泄漏 内存泄漏(Memory Leak)是指程序中已动态分配的堆内存由于某种原因,程序未释放或无法释放,造成系统内存的浪费,导致 ...

  2. OutOfMemoryError异常java内存泄漏(Memory Leak)和内存溢出(Memory Overflow)

    本篇文章理解源自于<深入理解java虚拟机>2.4章节 实战:OutOfMemoryError异常   在以下例子中,所有代码都可以抛出OutOfMemoryError异常,但是要区分到底 ...

  3. 内存泄漏(memory leak)和内存溢出

    1. 什么是内存泄漏(memory leak)? 指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况.内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存 ...

  4. Android 内存管理 &amp;Memory Leak &amp; OOM 分析

    1.Android 流程管理&内存 Android主要应用在嵌入式设备其中.而嵌入式设备因为一些众所周知的条件限制,通常都不会有非常高的配置,特别是内存是比較有限的. 假设我们编写的代 码其中 ...

  5. java 基础知识学习 内存泄露(memory leak) VS 内存溢出(out of memory)以及内存管理

    内存泄露(memory leak) VS 内存溢出(out of memory) 内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory ...

  6. python 内存泄漏调试

    Python应用程序内存泄漏的调试 Quake Lee quakelee@geekcn.org 新浪网技术(中国)有限公司 Sina Research & Development Python ...

  7. 【转】Android之内存泄漏调试学习与总结

    大家有或经常碰到OOM的问题,对吧?很多这样的问题只要一出现相信大家的想法跟小马的一样,就是自己的应用:优化.优化.再优化!而且如果出现类似于OOM这样级别的问题,根本就不好处理,LogCat日志中显 ...

  8. Android 内存优化 (防Memory Leak)

      在之前的 Android 内存管理 &Memory Leak & OOM 分析 中,说到了Android的内存管理相关的原理,也能了解到Android Memory Leak 和 ...

  9. AndroidStudio 内存泄漏分析 Memory Monitor

    ok.写一段内存泄漏的code private TextView txt; @Override protected void onCreate(Bundle savedInstanceState) { ...

随机推荐

  1. Android Studio 解决unspecified on project app resolves to an APK archive which is not supported

    出现该问题unspecified on project app resolves to an APK archive which is not supported as a compilation d ...

  2. Rabin-Karp 算法

    Rabin-Karp字符串查找算法 http://blog.chinaunix.net/uid-26548237-id-3968132.html

  3. KnockOut下的离开检测

    <input type="text" class="form-control" data-bind="event:{ blur:$root.ch ...

  4. [NOI.AC#35]string 缩点+拓扑排序

    链接 因为有交换相邻字母,因此给你字符串就相当于给你了这个字符串的所有排列 把等价的串映射到整数范围,再根据 \(m\) 种魔法连边,缩点后在 DAG 上DP即可 无耻地用了int128 #inclu ...

  5. 30.Node.js 全局对象

    转自:http://www.runoob.com/nodejs/nodejs-module-system.html 学习要点: - __filename - __dirname - setTimeou ...

  6. COGS 163 [USACO Mat07] 牛语

    COGS 163 [USACO Mat07] 牛语 输入文件:latin.in   输出文件:latin.out   简单对比 时间限制:1 s   内存限制:128 MB 奶牛们听说猪发明了一种秘密 ...

  7. WPF 入门《常用控件》

    1.GroupBox 注意: GroupBox仍然需要布局容器来放置元素.如: StackPanel面板 <GroupBox Header="select number?"& ...

  8. 决策树2 -- CART算法

    声明: 1,本篇为个人对<2012.李航.统计学习方法.pdf>的学习总结.不得用作商用,欢迎转载,但请注明出处(即:本帖地址). 2,因为本人在学习初始时有非常多数学知识都已忘记.所以为 ...

  9. ListView Item 点击展开隐藏问题

    public class ListAdapter extends BaseAdapter {     private Context mContext;     private View mLastV ...

  10. 【转载】使用logstash+elasticsearch+kibana快速搭建日志平台

    原文链接:http://www.cnblogs.com/buzzlight/p/logstash_elasticsearch_kibana_log.html 日志的分析和监控在系统开发中占非常重要的地 ...