内存泄漏分析工具
前言:
长期以来,内存泄漏分析起来是比较痛疼并且耗时。如果不知道程序跑了那些应用,或者程序应用比较复杂,尤其难分析。目前我们分析内存泄漏的方法是通过dump 堆文件,然后从中找出蛛丝马迹,可是这个堆文件打印出来的函数调用有几万次,很难通过对比发现问题,基于这个痛点,开发了一个内存泄漏分析工具。
解决思路:
如果我们将dump 出来的堆文件,用脚本语言整理一下:
- 按照首字母排序
- 显示调用次数
- 显示当前函数总申请大小
这样通过对比一份正常运行相同业务强制死机的堆文件,和 一份内存泄漏导致死机的堆文件,就可以通过总大小和申请次数来判断或者缩小判断哪个地方导致的泄漏
使用方法:
1.下载 MemoryAnalysis.py 文件
2.让正常使用过程中的模块死机(要保证和死机的模块保证同一个应用场景)
1.1802/1802S 死机方法
发送AT*EXASSERT=1 后发送 AT+LOG=14,即可让模块死机
2.8910 死机方法
通过发送AT*EXASSERT=1 后使用coolwatch如下按钮进入死机模式
3 获取堆文件
i.1802/1802S先按照 ARM ASR dump 工具 中的方法将heap dump 出来
ii.8910 使用下图所示方法dump heap
4.修改脚本
这些文件按放入 MemoryAnalysis.py 同级目录下,并根据平台将PLAT_TYPE 改为”ASR” 或者 ”RDA“ , 同时将这些文件放入到fileList 列表中。
6.运行脚本,
1.每份heap 文件 都会生成一个 以analysis.txt 结尾的文件,文件会显示每个获取堆空间的函数,以及获取的总大小,和总次数,并按照字母排序出来
7.开始分析(注意左侧是死机的dump)
左侧死机的这个函数总共获取的空间,和调用次数,比右侧这个正常的明显大出很多