java程序质量分析之thread dump和heap dump

壹.dump基本概念

android studio 一.5 以上暗中同意自带了mat 的调治将养的工具,

        在故障定位(越发是out of
memory)和总体性剖判的时候,平日会用到部分文书来救助大家清除代码难题。这一个文件记录了JVM运营时期的内部存款和储蓄器占用、线程推行等气象,那正是咱们常说的dump文件。常用的有heap
dump和thread dump(也叫javacore,或java dump)。我们能够那样领悟:heap
dump记录内部存款和储蓄器消息的,thread dump是记录CPU消息的。

行使办法:一 点击dump java heap 的Logo

        heap dump:

图片 1

        heap
dump文件是一个贰进制文件,它保存了某不经常刻JVM堆中目的使用景况。HeapDump文件是点名时刻的Java饭馆的快速照相,是1种镜像文件。Heap
Analyzer工具通过解析HeapDump文件,哪些对象占用了太多的库房空间,来开掘产生内部存款和储蓄器败露恐怕大概引起内部存款和储蓄器败露的对象。

                2 玩应用,

        thread dump:

                叁 android
studio会默许帮作者生成一张虚线区域的heap的行使的景观的.hprof

        thread
dump文件重视保存的是java应用中各线程在某不经常刻的周转的任务,即执行到哪3个类的哪1个艺术哪2个行上。thread
dump是1个文本文件,张开后方可看出每一个线程的奉行栈,以stacktrace的方法呈现。通过对thread
dump的解析能够博得运用是还是不是“卡”在某一点上,即在某一点运维的日子太长,如数据库查询,长期得不到响应,最后导致系统崩溃。单个的thread
dump文件一般的话是绝非怎么用处的,因为它只是记录了某八个相对时间点的情事。相比较实用的是,线程在3个小时段内的实施景况。

图片 2

三个thread
dump文件在条分缕析时特别有效,困为它能够见见在先后七个时间点上,线程实施的职位,要是开采先后两组数据中同1线程都执行在同一职分,则印证此处也许格外,因为程序运营是相当慢的,假诺四回均在某一点上,表达那一点的耗费时间是不小的。通过对那三个公文实行剖判,查出原因,进而缓慢解决难题。

图片 3

 

xxx.hprof

二.应用JDK自带的工具获得thread dump文件和heap dump文件

肆 点击右上角的analyzer tasks,接纳detected leaked activities,find
duplicate string,点击run 

       
使用的JDK工具在JDK_HOME/bin/目录下,使用到jmap和jstack那四个指令。

图片 4

1.获取heap dump文件

五 从leak activity
选取的解析还大概有特别有其余的变量引用着activity,从而让activity不能释放掉

        windows下切换来JDK_HOME/bin/,试行以下命令:jmap
-dump:format=b,file=heap.hprof 2576 

mat的工具的调度

        linux下切换到JDK_HOME/bin/,实施以下命令:./jmap
-dump:format=b,file=heap.hprof 2576

将android studio的xxx.hprof
文件生成mat能够辨识的正统的文件,选拔mat去深入分析。大约大致,轻易说下大家须要关心的多少个视图

        那样就能够在当前目录下生成heap.hprof文件,那正是heap dump文件。

Histogram:列出内部存款和储蓄器中的指标,对象的个数以及大小

2.获取thread dump文件

Dominator Tree:列出最大的靶子以及其重视存活的Object (大小是以Retained
Heap为正规排序的)

        windows下执行:jstack 2576 > thread.txt

Shallow size就是指标自己占用内部存款和储蓄器的大小,不带有其引用的目的。

        linux下执行:./jstack 2576 > thread.txt

Retained
Heap的定义,它意味着若是1个指标被放出掉,那会因为该对象的放出而减去引用进而被放飞的富有的靶子(包含被递归释放的)所据有的heap大小,也正是他援引了其余的堆里面包车型客车靶子,一般大家一供给关爱全体有关这一个指标的引用。

        windows/linux则会将下令施行结果转储到thread.txt,这正是thread
dump文件。有了dump文件后,我们就能够依赖品质剖析工具获得dump文件中的新闻。

接纳那条语句过滤全数的activity的靶子,选用右键接纳path to gcroot 选择all
reference,一一去深入分析原因呢。
select*frominstanceofandroid.app.Activity

3.假诺大家只必要将dump中现存的目的导出,那么能够利用:live参数

jmap -dump:live,format=b,file=heapLive.hprof 2576   

图片 5

       
实施完后,大家在时下目录C:\Java\jdk1.6.0_27\bin下看看刚生成的八个公文,如下所示:

图片 6
       
表明:如上实例的257陆是自个儿日前急需剖析的java进度PID,关于Windows下什么样获得钦赐的JAVA时间和空间程PID可参照:http://bijian1013.iteye.com/blog/2221238

 

叁.应用工具剖析java heap dump文件

       
今后我们应用一些图形化学工业具,来支援我们深入分析文件中的音讯,有效地定位难点。

1.使用JDK自带的jhat命令

       
jhat是用来深入分析java堆的吩咐,能够将堆中的对象以html的款式显得出来,包蕴对象的数目,大小等等,并帮助对象查询语言。

jhat -port 5000
heap.hrof图片 7

       
当服务运营完成后,大家就足以在浏览器中,通过http://localhost:5000/进行访问,如下所示:

图片 8
2.使用eclipse MAT工具

       
一般的话,应用程序的dump文件都以异常的大的,jdk自带命令难以深入分析这么些大文件。在事实上的生育处境下,大家不可能不要重视第三方工具,技术非常快张开这么些大文件,举行深入分析稳固。eclipse
memory
analyzer是壹款能够的heap解析工具,能够帮大家连忙牢固内部存款和储蓄器败露难点。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图