




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、内存分析工具MAT的使用一、MAT插件安装MAT(Memory Analyzer Tool) 是基于heap dumps来进行分析的,它的分析速度比jhat快,分析结果是图形界面显示,比java内置jhat的可读性更高,通过Eclipse市场安装 方法/步骤1打开Eclipse - >help - > Eclipse Marketplace2点击install,等待下面的进度条加载完毕后,勾选全部,点击Next3 同意协议后,点击Finish就开始安装MAT了直接输入URL安装 方法/步骤21. 打开Eclipse - >help -
2、 > Install New Software2. 在work with输入图中下载地址,勾选Memory Analyzer for Eclipse IDE选项3. 若没有勾选Memory Analyzer for Eclipse IDE选项,点击地址栏旁边的Add,在location里输入以上地址,点击OK即可。4. 安装完成后提示重启Eclipse,重启后打开window - > open perspective,看到Memory Analysis证明安装成功。二、MAT的使用案例一问题线上某一台机器出现异常.接口调用
3、的rt达到了万级别.基本可以判断这个机器已经挂了.进而分析该机器一直在fgc.然后马上dump内存,进而进行分析(中间一些异常的gc日志没有截图).之前学习的jvm知识都是纯理论的,这次是实打实线上出现的问题.所以记录一下.步骤1 、先dump对应的堆,然后从线上发到自己本机 dump的命令是jmap -dump:format=b,file=heap.bin <pid> 2、调整eclipse的内存 具体的数值,需要看dump的文件大小.比如我的dump文件是1.3G,我就给了eclipse 2G的内存.据说有些dump
4、文件有几十个G的大小,那么分析的机器也必须比这个大才行,否则eclipse本身就OOM了. 3、分析. 调整到 Memory Analysis 窗口,然后File->Open Heap Dump 然后选择dump的文件,然后MAT就自动会进行分析.分析完了,直接查看 Leak Suspects Report . MAT会自动帮你找内存泄露的疑凶.然后给你点下面的Detail .可以看到最直观的类和所占用的大小可以看到, IosPushClient 的直接引用是40byte 但是对应的间接引用达到了恐怖的420M 那么再点击该类,l
5、ist obejcts .重点看间接引用占用的大的可以看到这个LinkedHashMap中,有47528个1776byte的对象。其实看到这里,就基本清楚了.这个是由于在push的时候把对应的push消息给保留住,然后造成一直堆积在内存中造成的。 解决办法: 在不修改对应的push底层实现的前提下,每次push了2W条消息就清理一次.后续有时间再修改底层逻辑吧.案例二1 内存泄漏的排查方法Dalvik Debug Monitor Server (DDMS) 是 ADT插件的一部分,其中有两项功能可用于内存检查 :
6、83; heap 查看堆的分配情况· allocation tracker跟踪内存分配情况DDMS 这两项功能有助于找到内存泄漏的操作行为。Eclipse Memory Analysis Tools (MAT) 是一个分析 Java堆数据的专业工具,用它可以定位内存泄漏的原因。工具地址 : /mat/1.1 观察 Heap· 运行程序,然后进入 DDMS管理界面,如下: PS : 点击工具栏上的 来更
7、新统计信息点击右侧的 Cause GC 按钮或工具栏上的 即可查看当前的堆情况,如下: 主要关注两项数据:o Heap Size 堆的大小,当资源增加,当前堆的空余空间不够时,系统会增加堆的大小,若超过上限 (例如 64M,视平台和具体机型而定)则会被杀掉o Allocated 堆中已分配的大小,这是应用程序实际占用的内存大小,资源回收后,此项数据会变小· 查看操作前后的堆数据,看是否有内存泄漏 对单一操作(比如添加页,删除页)进行反复操作,如果堆的大小一直增加,则有内存泄漏的隐患。
8、1.2 利用MAT分析内存堆DDMS 可以将当前的内存 Dump成一个 hprof格式的文件,MAT 读取这个文件后会给出方便阅读的信息,配合它的查找,对比功能,就可以定位内存泄漏的原因。· 获取 hprof文件 点击工具栏上的 按钮,将内存信息保存成文件。 如果是用 MAT Eclipse 插件获取的 Dump文件,则不需要经过转换,Adt会自动进行转换然后打开。· 转换 hprof文件 DDMS Dump 出的文件要经过
9、转换才能被 MAT识别,Android SDK提供了这个工具 hprof-conv (位于 sdk/tools下)./hprof-conv xxx-a.hprof xxx-b.hprof· 用 MAT打开转换后的 hprof文件 1.3 Histogram 查询用的最多的功能是 Histogram,点击 Actions下的 Histogram项将得到 Histogram结果:它按类名将所有的实例对象列出来,可以点击表头进行排序,在表的第一行可以输入正则表
10、达式来匹配结果 :在某一项上右键打开菜单选择 list objects ->with incoming refs 将列出该类的实例:它展示了对象间的引用关系,比如展开后的第一个子项表示这个 HomePage(0x420ca5b0)被HomePageContainer(0x420c9e40)中的 mHomePage属性所引用.快速找出某个实例没被释放的原因,可以右健 Path to GC Roots->exclue all phantom/weak/soft etc. reference :得到的结果是:从表中可以
11、看出 PreferenceManager -> ->HomePage这条线路就引用着这个 HomePage实例。用这个方法可以快速找到某个对象的 GC Root,一个存在 GC Root的对象是不会被 GC回收掉的.1.4 Histogram 对比为查找内存泄漏,通常需要两个 Dump结果作对比,打开 Navigator History面板,将两个表的 Histogram结果都添加到 Compare Basket中去 :添加好后,打开 Compare Baske
12、t面板,得到结果:点击右上角的 ! 按钮,将得到比对结果:注意,上面这个对比结果不利于查找差异,可以调整对比选项:再把对比的结果排序,就可得到直观的对比结果:也可以对比两个对象集合,方法与此类似,都是将两个 Dump结果中的对象集合添加到Compare Basket中去对比。找出差异后用 Histogram查询的方法找出 GC Root,定位到具体的某个对象上。1.5 例子举例一个典型的分析内存泄漏的过程:1.使用 Heap查看当前堆大小为 23.00M2.添加一个页后堆大小变为 23.40M3.将添加
13、的一个页删除,堆大小为 23.40M4.多次操作,结果仍相似,说明添加/删除页存在内存泄漏 (也应注意排除其它因素的影响)5. Dump 出操作前后的 hprof 文件 (1.hprof,2.hprof),用 mat打开,并得到 histgram结果6.使用 HomePage字段过滤 histgram结果,并列出该类的对象实例列表,看到两个表中的对象集合大小不同,操作后比操作前多出一个 HomePage,说明确实存在泄漏7.将两个列表进行对比,找出多出的一个对象,用查找 GC
14、 Root的方法找出是谁串起了这条引用线路,定位结束PS :· 很多时候堆增大是 Bitmap引起的,Bitmap在 Histogram中的类型是 byte ,对比两个 Histogram中的 byte 对象就可以找出哪些 Bitmap有差异· 多使用排序功能,对找出差异很有用2 内存泄漏的原因分析总结出来只有一条: 存在无效的引用! 良好的模块设计以及合理使用设计模式有助于解决此问题。3 Tips· 使用 android:largeHeap="true"标记 (API Level >= 11) 在 AndroidManifest.xml中的 Application节点中声明即可分配到更大的堆内存, android:largeHeap标记在 Android系统应用中也有广泛的应用 ,比如 L
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025至2030中国益生元纤维行业产业运行态势及投资规划深度研究报告
- 2025至2030中国白酒原料行业产业运行态势及投资规划深度研究报告
- 2025至2030中国电子书阅读器行业深度研究及发展前景投资评估分析
- 2025至2030中国特殊标志信标浮标行业市场占有率及投资前景评估规划报告
- 支付宝的交易流程
- 施工管理培训计划
- 医疗领域中心理干预对患者康复的影响
- 教育行业大数据未来的增长机会与挑战
- 教育信息化进程中的智能教学平台探讨
- 教育技术领域的新成果探讨
- 腰穿培训课件
- 外墙清洗服务实施方案及措施
- 青少年树立正确的人生价值观专题教育课件
- 贵州2022-2023学年四年级数学第二学期期末质量检测试题含解析
- 基坑开挖、立杆、架线、拉线施工安装工艺要求(完整资料)
- 渑池铝矿矿产资源开采与生态修复方案
- 创伤严重程度(ISS)评分表(完整版)
- 茶叶中茶多酚检测方法的改进
- GB/T 2423.102-2008电工电子产品环境试验第2部分:试验方法试验:温度(低温、高温)/低气压/振动(正弦)综合
- GB/T 18391.5-2009信息技术元数据注册系统(MDR)第5部分:命名和标识原则
- 第二季度护理红黄警示及核心制度试题含答案
评论
0/150
提交评论