内存泄漏检测分析工具
来源:互联网 发布:c 高斯算法 编辑:程序博客网 时间:2024/04/29 02:09
monkey 工具测试应用
可以使用monkey自动化测试工具快速不断的操作应用。终端指令:
// 300 毫秒一个事件,2000个事件,跑10分钟adb shell monkey -p com.android.deskclock -v --throttle 300 --ignore-crashes --ignore-security-exceptions --ignore-timeouts 2000
参数说明:
adb shell monkey 2000 // 2000个随机事件-p // 指定包名-v // 日志级别 -v/-v -v/-v -v -v--throttle 300 // 事件间隔时间--ignore-crashes // 忽略应用crash信息,继续执行--ignore-security-exceptions // 忽略安全异常--ignore-timeouts //
Android divece monitor 获取hprof文件
使用Android studio的divece monitor工具,或者 DDMS 工具可以获得hprof文件。
hprof文件是虚拟机的内存快照,包含某一时刻虚拟机内存占用情况信息。
1. 使用eng版本(root后的)手机连接电脑,打开 ddms 工具,在左侧选中自己应用的进程。
2. 在右侧界面多个tab页中选中 heap tab 页。
3. 点击选择 update heap 按钮,之后 heap 数据会自动更新。按钮在左上方。
4. 点击cause GC 按钮执行一次 GC , 界面上数据会显示出来。
5. 跑了一段时间 monkey 后,就可以dump hprof 文件了。点击左上角按钮5 dump hprof file ,一个短暂的延迟后,会弹出选择保存文件位置的弹框。
保存下来的hprof文件无法直接用 MAT 打开,需要使用 Android hprof-conv 工具转换为标准的 hprof 格式文件。这个工具在Android/Sdk/platform-tools
目录下,使用方法:
$ ./hprof-conv ~/path/before.hprof ~/path/after.hprof
使用 MAT(Memory analysis tool)分析 hprof文件
工具下载地址:
http://www.eclipse.org/mat/downloads.php
MAT 是一个内存分析工具,它不会为你指出具体哪一块代码导致了内存泄露,需要我们自己根据内存信息分析出问题点。
使用 MAT 打开 hprof 文件,主界面是一个展示内存占用比例的饼图,我们主要使用左下两个圈红的功能进行内存分析。
- Histogram : 该操作可以列出 heap 中每个类的实例个数。
- Dominator Tree : 该操作可以列出占用内存最大的对象,以及该对象被谁所引用导致不能释放。
jvm 判断对象是否存活采用的是可达性分析算法,算法的基本思路就是通过一系列称为 “GC roots” 的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的。
所以我们分析的目标就是找出那些不应该存在的对象实例,以及是什么引用了它们导致不能释放。
打开 Histogram 视图,并在正则表达式栏中输入本项目相关的匹配信息,查看类实例的数量。从图中可以看出,一个首页Activity居然同时有9个实例,这明显是不正常的,说明有什么导致了Activity的实例没有被回收。
Dominator Tree View :
Dominator Tree 有两列展示 heap 大小:
- shallow heap : 对象真实占用的内存大小
- retained heap : 该对象被回收,可能所能释放的最大内存大小
如图,选中一 retained heap 远大于 自身 shallow heap 的对象,查看对象到GC Roots的引用路径。(将软引用,弱引用等忽略,因为只有强引用会导致对象无法回收)
可以明确看出对象的引用路径,我们需要根据对象引用信息,去代码中找到具体的使用不当的地方,然后修复。比如这个例子是因为 EventBus 持有了 Activity 的实例没有释放,导致Activity的资源都无法释放。
- 内存泄漏检测分析工具
- 内存分析与内存泄漏检测
- 使用工具分析内存泄漏
- MAT内存泄漏分析工具
- 检测iphone内存泄漏-内存泄漏工具教程(译)
- iphone-- 检测iphone内存泄漏-内存泄漏工具教程
- Valgrind ---内存调试,内存泄漏检测以及性能分析的软件开发工具
- linux内存调试、内存泄漏检测以及性能分析的工具-valgrind
- 深度分析内存泄漏原因,使用MAT工具检测内存泄露和性能
- Valgrind ---内存调试,内存泄漏检测以及性能分析的软件开发工具
- Visual Leak Detector检测内存泄漏工具
- iPhone Instruments工具使用 内存泄漏检测
- linux下检测内存泄漏的工具
- linux实用技巧:检测内存泄漏工具Valgrind
- Linux下检测内存泄漏工具Valgrind
- 检测内存泄漏的常见工具-LeakCanary
- 检测内存泄漏的常见工具
- linux工具之检测内存泄漏-valgrind
- EasyPusher华为手机直播推流硬编码[OMX.IMG.TOPAZ.Encoder] failed to set input port definition parameters.
- 提高php代码质量 36计
- CentOS7下设置静态ip
- Java基础知识之数组
- Javascript第六天学习总结日期对象和定时器
- 内存泄漏检测分析工具
- 双向数据绑定原理
- 170819 Anaconda两行命令安装tensorflow-gpu+keras-gpu及Gpu vs Cpu验证
- 使用vue-cli搭建webpack模板项目
- JMeter 线程组之Stepping Thread Group插件
- 玩转PHP关联数组的10个技巧
- 213231
- redis用scan进行数据的迭代遍历
- leetcode(160). Intersection of Two Linked Lists