码迷,mamicode.com
首页 > 编程语言 > 详细

深入JVM系列之(3):JavaCore和HeapDump

时间:2016-06-08 23:08:30      阅读:705      评论:0      收藏:0      [点我收藏+]

标签:

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系列之(3):JavaCore和HeapDump

标签:

原文地址:http://www.cnblogs.com/hzg1981/p/5558065.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!