深入JVM系列之:JavaCore和HeapDump

Posted Zhao Gang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深入JVM系列之:JavaCore和HeapDump相关的知识,希望对你有一定的参考价值。

jvm 生成javacore和heapdump文件

在Server端开发与运维中,经常需要生成javacore和heapdump文件,以便分析jvm的运行状态。javacore文件中给出jvm线程的详细情况,而heapdump文件则给出jvm的运行时内存的使用情况,对分析JVM的内存泄漏有重要的作用。其中,javacore文件一般是文本文件,而heapdump则一般是二进制文件,需要使用专门的分析工具进行分析,一般常用的工具为IBM的heap anylizer。

JavaCore是关于CPU的,而HeapDump文件是关于内存的。

JavaCore文件主要保存的是Java应用各线程在某一时刻的运行的位置,即JVM执行到哪一个类、哪一个方法、哪一个行上。它是一个文本文件,打开后可以看到每一个线程的执行栈,以stack trace的显示。通过对JavaCore文件的分析可以得到应用是否“卡”在某一点上,即在某一点运行的时间太长,例如数据库查询,长期得不到响应,最终导致系统崩溃等情况。

HeapDump文件是一个二进制文件,它保存了某一时刻JVM堆中对象使用情况,这种文件需要相应的工具进行分析,如IBM Heap Analyzer这类工具。这类文件最重要的作用就是分析系统中是否存在内存溢出的情况。

 
(1)Oracle JVM
如果使用Oracle JVM也就是标准的SUN JVM(SUN已被oracle收购)当内存溢出时生成heapdump文件配置如下
1 -Xloggc:${目录}/temp_gc.log           (GC日志文件)
2 -XX:+HeapDumpOnOutOfMemoryError       (内存溢出时生成heapdump文件)
3 -XX:HeapDumpPath=${目录}              (heapdump文件存放位置)

 


如果要即时动态生成heapdump文件可以使用jmap命令,jdk6.0已取消了-XX:+HeapDumpOnCtrlBreak配置参数通过ctrl+break的方式。
1 jmap -dump:format=b,file=temp_heapdump.hprof 

 

而javacore文件的生成,则需要依赖于kill命令,当jvm进程被杀死的时候,生成javacore文件。



(2)HP JVM
与生成heapdump相关的命令行参数:
1 -Xverbosegc:file=${目录}/temp_gc.log  (GC日志文件)
2 -XX:+HeapDumpOnOutOfMemoryError       (内存溢出时生成heapdump文件)
3 -XX:+HeapDumpOnCtrlBreak              (可以通过ctrl+break组合键动态生成heapdump文件 HP JVM也在jdk6中取消了这一方式吗??)
4 -XX:HeapDumpPath=${目录}              (heapdump文件存放位置)

 



(3)IBM JVM
非windows操作系统环境中
1 -XverboseGClog: ${目录}/temp_gc.log   (GC日志文件)
2 -Xdump:heap:events=user,file=${目录}/pid%uid%pid.phd

 表示可以根据需要通过kill -3 产生DUMP文件,%uid和%pid为变量


windows操作系统环境中:启动wsadmin,进入wsadmin环境
1 wsadmin> set jvm [$AdminControl completeObjectName type=JVM,process=server1,*]
2 wsadmin> $AdminControl invoke $jvm generateHeapDump
3 wsadmin> $AdminControl invoke $jvm dumpThreads

 

 

以上主要是通过命令行,配置使用kill命令生成javacore和heapdump文件。 

 

 

总结:

linux环境下,使用ps -ef 或者ps -aux命令,或者top命令,得到pid,然后使用kill 命令杀死特定进程,产生java core 和heap dump 文件。kill命令就是用户向进程发送signal。

 

参考文献:

http://www.codeceo.com/article/java-javacore-heapdump.html

http://blog.itpub.net/14710393/viewspace-754416

以上是关于深入JVM系列之:JavaCore和HeapDump的主要内容,如果未能解决你的问题,请参考以下文章

深入JVM系列之GC机制收集器与GC调优

深入JVM系列之GC机制收集器与GC调优(转)

直通BAT必考题系列:深入剖析JVM之G1收集器及回收流程与推荐用例

直通BAT必考题系列:深入剖析JVM之G1收集器及回收流程与推荐用例

开智小站-面试强化系列深入剖析JVM

JVM系列之执行引擎