内存dump文件导出与查看

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内存dump文件导出与查看相关的知识,希望对你有一定的参考价值。

参考技术A 生成dump文件的命令:
jmap -dump:format=b,file=20170307.dump 16048
file后面的是自定义的文件名,最后的数字是进程的pid

使用jvisualvm来分析dump文件:
jvisualvm是JDK自带的Java性能分析工具,在JDK的bin目录下,文件名就叫jvisualvm.exe。
jvisualvm可以监控本地、远程的java进程,实时查看进程的cpu、堆、线程等参数,对java进程生成dump文件,并对dump文件进行分析。
像我这种从服务器上dump下来文件也可以直接扔给jvisualvm来分析。
使用方式:直接双击打开jvisualvm.exe,点击文件->装入,在文件类型那一栏选择堆,选择要分析的dump文件,打开。

使用JMAP dump及分析dump文件

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

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

只打印活跃对象 jmap -histo[:live] <pid>

 

导出整个JVM 中内存信息

dump堆 当OLD区域占用大于90%的时候dump下来用MemoryAnalyzer分析

jmap -dump:live,format=b,file=tai.dump pid
jmap -dump:live,format=b,file=tai.dump 16733

 

 

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

"http-8080-10" daemon prio=10 tid=x0a949bb60 nid=0x884  waiting for monitor entry [...]

"http-8080-10" 这个线程处于等待状态。 waiting for monitor entry 如果在连续几次输出线程堆栈信息都存在于同一个或多个线程上时,则说明系统中有锁竞争激烈,死锁,或锁饿死的想象。


“http-8080-11” daemon prio=10 tix=xxx nid=xxx in object.wait() [...]
 java.lang.Thread.State:waiting (on object monitor)
该表示http-8080-11的线程处于对象的Wait 上,等待其他线程的唤醒,这也是线程池的常见用法。

“Low Memory Detector”daemon prio=10 tix=xx nid=xxx runnable [...] java.lang.Thread.State:runnable
表示“Low Memory Detector” 的线程处于Runable状态,等待获取CPU的使用权.

 

 

 

 

 

 

 


 

 

 

查看Pid  文件

/proc/18225/status or io 信息

以上是关于内存dump文件导出与查看的主要内容,如果未能解决你的问题,请参考以下文章

DUMP文件导入导出

oracle 怎么查看dump

oracle dump是啥

pl/sql Developer如何导入dump文件

如何导出Java应用程序的内存快照文件

使用JMAP dump及分析dump文件