内存分析工具MAT的使用Word版

上传人:痛*** 文档编号:141963050 上传时间:2022-08-24 格式:DOC 页数:17 大小:1.40MB
收藏 版权申诉 举报 下载
内存分析工具MAT的使用Word版_第1页
第1页 / 共17页
内存分析工具MAT的使用Word版_第2页
第2页 / 共17页
内存分析工具MAT的使用Word版_第3页
第3页 / 共17页
资源描述:

《内存分析工具MAT的使用Word版》由会员分享,可在线阅读,更多相关《内存分析工具MAT的使用Word版(17页珍藏版)》请在装配图网上搜索。

1、传播优秀Word版文档 ,希望对您有帮助,可双击去除!内存分析工具MAT的使用一、MAT插件安装MAT(Memory Analyzer Tool) 是基于heap dumps来进行分析的,它的分析速度比jhat快,分析结果是图形界面显示,比java内置jhat的可读性更高,通过Eclipse市场安装 方法/步骤1打开Eclipse - help- Eclipse Marketplace2点击install,等待下面的进度条加载完毕后,勾选全部,点击Next传播优秀Word版文档 ,希望对您有帮助,可双击去除!3同意协议后,点击Finish就开始安装MAT了传播优秀Word版文档 ,希望对您有帮

2、助,可双击去除!直接输入URL安装 方法/步骤21. 打开Eclipse - help- 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证明安装成功。传播优秀Word版文档 ,希望对您有帮助,可双击去

3、除!传播优秀Word版文档 ,希望对您有帮助,可双击去除!二、MAT的使用案例一问题线上某一台机器出现异常.接口调用的rt达到了万级别.基本可以判断这个机器已经挂了.进而分析该机器一直在fgc.然后马上dump内存,进而进行分析(中间一些异常的gc日志没有截图).之前学习的jvm知识都是纯理论的,这次是实打实线上出现的问题.所以记录一下.步骤1 、先dump对应的堆,然后从线上发到自己本机 dump的命令是jmap -dump:format=b,file=heap.bin 2、调整eclipse的内存 具体的数值,需要看dump的文件大小.比如我的dump文件是1.3G,我就给了eclipse

4、 2G的内存.据说有些dump文件有几十个G的大小,那么分析的机器也必须比这个大才行,否则eclipse本身就OOM了.3、分析. 调整到 Memory Analysis 窗口,然后File-Open Heap Dump然后选择dump的文件,然后MAT就自动会进行分析.分析完了,直接查看 Leak Suspects Report . MAT会自动帮你找内存泄露的疑凶.然后给你传播优秀Word版文档 ,希望对您有帮助,可双击去除!点下面的Detail .可以看到最直观的类和所占用的大小可以看到, IosPushClient 的直接引用是40byte 但是对应的间接引用达到了恐怖的420M 那么

5、再点击该类,list obejcts .重点看间接引用占用的大的传播优秀Word版文档 ,希望对您有帮助,可双击去除!传播优秀Word版文档 ,希望对您有帮助,可双击去除!可以看到这个LinkedHashMap中,有47528个1776byte的对象。其实看到这里,就基本清楚了.这个是由于在push的时候把对应的push消息给保留住,然后造成一直堆积在内存中造成的。解决办法: 在不修改对应的push底层实现的前提下,每次push了2W条消息就清理一次.后续有时间再修改底层逻辑吧.案例二1内存泄漏的排查方法传播优秀Word版文档 ,希望对您有帮助,可双击去除!Dalvik Debug Monit

6、or Server (DDMS)是ADT插件的一部分,其中有两项功能可用于内存检查: heap查看堆的分配情况 allocation tracker跟踪内存分配情况DDMS这两项功能有助于找到内存泄漏的操作行为。Eclipse Memory Analysis Tools (MAT)是一个分析Java堆数据的专业工具,用它可以定位内存泄漏的原因。工具地址:https:/www.eclipse.org/mat/1.1观察Heap 运行程序,然后进入DDMS管理界面,如下:PS :点击工具栏上的来更新统计信息点击右侧的Cause GC按钮或工具栏上的即可查看当前的堆情况,如下:主要关注两项数据:o

7、Heap Size堆的大小,当资源增加,当前堆的空余空间不够时,系统会增加堆的大小,若超过上限(例如64M,视平台和具体机型而定)则会被杀掉传播优秀Word版文档 ,希望对您有帮助,可双击去除!o Allocated堆中已分配的大小,这是应用程序实际占用的内存大小,资源回收后,此项数据会变小 查看操作前后的堆数据,看是否有内存泄漏对单一操作(比如添加页,删除页)进行反复操作,如果堆的大小一直增加,则有内存泄漏的隐患。1.2 利用MAT分析内存堆DDMS可以将当前的内存Dump成一个hprof格式的文件,MAT读取这个文件后会给出方便阅读的信息,配合它的查找,对比功能,就可以定位内存泄漏的原因。

8、 获取hprof文件点击工具栏上的按钮,将内存信息保存成文件。如果是用MAT Eclipse插件获取的Dump文件,则不需要经过转换,Adt会自动进行转换然后打开。 转换hprof文件DDMS Dump出的文件要经过转换才能被MAT识别,AndroidSDK提供了这个工具hprof-conv(位于sdk/tools下)./hprof-conv xxx-a.hprof xxx-b.hprof 用MAT打开转换后的hprof文件传播优秀Word版文档 ,希望对您有帮助,可双击去除!1.3 Histogram 查询用的最多的功能是Histogram,点击Actions下的Histogram项将得到H

9、istogram结果:它按类名将所有的实例对象列出来,可以点击表头进行排序,在表的第一行可以输入正则表达式来匹配结果:传播优秀Word版文档 ,希望对您有帮助,可双击去除!在某一项上右键打开菜单选择list objects -with incoming refs将列出该类的实例:它展示了对象间的引用关系,比如展开后的第一个子项表示这个HomePage(0x420ca5b0)被HomePageContainer(0x420c9e40)中的mHomePage属性所引用.快速找出某个实例没被释放的原因,可以右健Path to GC Roots-exclue all phantom/weak/soft

10、 etc. reference:传播优秀Word版文档 ,希望对您有帮助,可双击去除!得到的结果是:从表中可以看出PreferenceManager - -HomePage这条线路就引用着这个HomePage实例。用这个方法可以快速找到某个对象的GC Root,一个存在GC Root的对象是不会被GC回收掉的.1.4 Histogram 对比为查找内存泄漏,通常需要两个Dump结果作对比,打开Navigator History面板,将两个表的Histogram结果都添加到Compare Basket中去:传播优秀Word版文档 ,希望对您有帮助,可双击去除!添加好后,打开Compare Bas

11、ket面板,得到结果:点击右上角的!按钮,将得到比对结果:注意,上面这个对比结果不利于查找差异,可以调整对比选项:传播优秀Word版文档 ,希望对您有帮助,可双击去除!再把对比的结果排序,就可得到直观的对比结果:也可以对比两个对象集合,方法与此类似,都是将两个Dump结果中的对象集合添加到Compare Basket中去对比。找出差异后用Histogram查询的方法找出GC Root,定位到具体的某个对象上。1.5 例子举例一个典型的分析内存泄漏的过程:1.使用Heap查看当前堆大小为23.00M2.添加一个页后堆大小变为23.40M3.将添加的一个页删除,堆大小为23.40M4.多次操作,结

12、果仍相似,说明添加/删除页存在内存泄漏(也应注意排除其它因素的影响)传播优秀Word版文档 ,希望对您有帮助,可双击去除!5. Dump出操作前后的hprof文件(1.hprof,2.hprof),用mat打开,并得到histgram结果6.使用HomePage字段过滤histgram结果,并列出该类的对象实例列表,看到两个表中的对象集合大小不同,操作后比操作前多出一个HomePage,说明确实存在泄漏7.将两个列表进行对比,找出多出的一个对象,用查找GC Root的方法找出是谁串起了这条引用线路,定位结束PS : 很多时候堆增大是Bitmap引起的,Bitmap在Histogram中的类型是

13、byte ,对比两个Histogram中的byte对象就可以找出哪些Bitmap有差异 多使用排序功能,对找出差异很有用2 内存泄漏的原因分析总结出来只有一条:存在无效的引用!良好的模块设计以及合理使用设计模式有助于解决此问题。3 Tips 使用android:largeHeap=true标记(API Level = 11)在AndroidManifest.xml中的Application节点中声明即可分配到更大的堆内存, android:largeHeap标记在Android系统应用中也有广泛的应用,比如Launcher, Browser这些内存大户上均有使用.传播优秀Word版文档 ,希望对您有帮助,可双击去除!三、MAT参考文献 DDMS官方教程 MAT下载http:/www.eclipse.org/mat/downloads.php MAT使用http:/android-developers.blogspot.tw/2011/03/memory-analysis-for-android.html

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!