做图必备素材网站,网络推广运营是什么,西安高风险调整,网站建设费会计一、dump基本概念
在故障定位(尤其是out of memory)和性能分析的时候#xff0c;经常会用到一些文件来帮助我们排除代码问题。这些文件记录了JVM运行期间的内存占用、线程执行等情况#xff0c;这就是我们常说的dump文件。常用的有heap dump和thread dump#xff08;也叫ja…一、dump基本概念
在故障定位(尤其是out of memory)和性能分析的时候经常会用到一些文件来帮助我们排除代码问题。这些文件记录了JVM运行期间的内存占用、线程执行等情况这就是我们常说的dump文件。常用的有heap dump和thread dump也叫javacore或java dump。我们可以这么理解heap dump记录内存信息的thread dump是记录CPU信息的。
heap dump
heap dump文件是一个二进制文件它保存了某一时刻JVM堆中对象使用情况。HeapDump文件是指定时刻的Java堆栈的快照是一种镜像文件。Heap Analyzer工具通过分析HeapDump文件哪些对象占用了太多的堆栈空间来发现导致内存泄露或者可能引起内存泄露的对象。
thread dump
thread dump文件主要保存的是java应用中各线程在某一时刻的运行的位置即执行到哪一个类的哪一个方法哪一个行上。thread dump是一个文本文件打开后可以看到每一个线程的执行栈以stacktrace的方式显示。通过对thread dump的分析可以得到应用是否“卡”在某一点上即在某一点运行的时间太长如数据库查询长期得不到响应最终导致系统崩溃。单个的thread dump文件一般来说是没有什么用处的因为它只是记录了某一个绝对时间点的情况。比较有用的是线程在一个时间段内的执行情况。
两个thread dump文件在分析时特别有效困为它可以看出在先后两个时间点上线程执行的位置如果发现先后两组数据中同一线程都执行在同一位置则说明此处可能有问题因为程序运行是极快的如果两次均在某一点上说明这一点的耗时是很大的。通过对这两个文件进行分析查出原因进而解决问题。
二、dump获取方式
使用的JDK工具在JDK_HOME/bin/目录下使用到jmap和jstack这两个命令。
1.获取heap dump文件 windows下切换到JDK_HOME/bin/执行以下命令jmap -dump:formatb,fileheap.hprof 2576 inux下切换到JDK_HOME/bin/执行以下命令./jmap -dump:formatb,fileheap.hprof 2576
这样就会在当前目录下生成heap.hprof文件这就是heap dump文件。
2.获取thread dump文件 windows下执行jstack 2576 thread.txt linux下执行./jstack 2576 thread.txt
windows/linux则会将命令执行结果转储到thread.txt这就是thread dump文件。有了dump文件后我们就能借助性能分析工具获取dump文件中的信息。
3.如果我们只需要将dump中存活的对象导出那么可以使用:live参数
jmap -dump:live,formatb,fileheapLive.hprof 2576 执行完后我们在当前目录C:\Java\jdk1.6.0_27\bin下看到刚生成的三个文件如下所示
三、使用工具分析dump文件
现在我们使用一些图形化工具来帮助我们分析文件中的信息有效地定位问题。
3.1 使用JDK自带的jhat命令
jhat是用来分析java堆的命令可以将堆中的对象以html的形式显示出来包括对象的数量大小等等并支持对象查询语言。
执行命令jhat -port 9010 heapLive.hprof
当服务启动完成后我们就可以在浏览器中通过http://localhost:9010/进行访问如下所示 3.2 使用eclipse MAT工具
一般来说应用程序的dump文件都是很大的jdk自带命令难以分析这些大文件。在实际的生产环境下我们必须要借助第三方工具才能快速打开这些大文件进行分析定位。 eclipse memory analyzer是一款优秀的heap分析工具能够帮我们快速定位内存泄露问题。 使用MAT进行案例分析 https://blog.csdn.net/wanghuiqi2008/article/details/50724676