dump文件入门基础

来源:互联网 发布:淘宝云客服培训中心 编辑:程序博客网 时间:2024/05/22 15:50
Dump文件是进程的内存镜像,扩展名是 .dmp。可以把程序的执行状态通过调试器保存到dump文件中。Dump文件是用来给驱动程序编写人员调试驱动程序用的,这种文件必须用专用工具软件打开,比如使用WinDbg打开。主要是用来在系统中异常或者崩溃的时候,来生成dump文件,然后用调试器来调试。这样就可以在生产环境中的dmp文件,拷贝到自己的开发机器上,调试就可以找到错误的位置。

使用JMAP dump及分析dump文件
jmap转储可以使用如下方式:
jmap -dump:file=DumpFileName.txt,format=b pid
例如:
C:\Users\Administrator\Desktop>jmap -dump:file=D:/javaDump.hprof,format=b 3614
Dumping heap to D:\javaDump.hprof ...
Heap dump file created
其中, 3614 是此次启动Tomcat后,通过tasklist,或任务管理器查看到的 java进程的ID,一般来说, jmap 需要和 java的版本一致或者兼容,才能成功导出. 如果不知道如何使用,直接输入 jmap, 或者 jmap -h 则可以看到提示信息.

jmap -heap [pid] 查看整个JVM内存状态
要注意的是在使用CMS GC 情况下,jmap -heap的执行有可能会导致JAVA 进程挂起

jmap -histo [pid] 查看JVM堆中对象详细占用情况

jmap -dump:format=b,file=文件名 [pid] 导出整个JVM 中内存信息
-heap:format=b      
产生一个HeapDump文件,此为生成heapdump文件的重要参数。
例:jmap -heap:format=b 2657
会产生一个heap.bin的heapdump文件。
需要注意的是,此生成heapdump的参数为JDK1.5,在1.6中的格式为:
jmap -dump:live,format=b,file=xxx 2657
这里更加强大一些,可以指定是存活的对象,还有生成heapdump的文件名。


kill -3 [pid] 在Linux 上找到Java所在的进程号,线程的相关信息就输出到console.

jstack 是sun JDK 自带的工具,通过该工具可以看到JVM 中线程的运行状况,包括锁等待,线程是否在运行
执行 jstack [pid] ,线程的所有堆栈信息.

用jhat分析Dump文件
如果你的Heap Dump文件超过了几百MB,那就不要再寄希望于jhat了,因为jhat需要数倍于dump文件的内存。这个时候你可以用MAT(Memory Analyzer),用MAT你可以在有2GB可用内存的机器上分析大约1GB左右的Dump文件。
使用JHat分析JVM堆dump文件的工具,基于此工具可以分析JVM heap中对象占用状况
jhat -J-Xmx1024M [file] 
执行后等待console中输出Started HTTP server on port 7000
然后就可以使用浏览器访问HTTP://ip:7000
注:只有在Dump文件比较小的时候才适合用jhat分析Dump文件
jhat(Java Heap Analysis Tool)
jhat -stack false -refs false -J-Xmx2g /path/to/heap/dump/heap.bin

生成Heap Dump文件的方法:
JMAP(Java Memory Map)
方法一:让运行中的JVM生成Dump文件
/usr/java/jdk/bin/jmap -F -dump:format=b,file=/path/to/heap/dump/heap.bin PID
方法二:让JVM在遇到OOM(OutOfMemoryError)时生成Dump文件
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/heap/dump.

eclipse Memory Analyzer
Eclipse 提供的一个用于分析JVM 堆Dump文件的插件。借助这个插件可查看对象的内存占用状况,引用关系,分析内存泄露等。
http://www.eclipse.org/mat/

0 0
原创粉丝点击