Linux中生成 Core Dump 文件的方法
1 什么是 Core Dump
Core Dump 又叫核心转储。在程序运行过程中发生异常时,将其内存数据保存到文件中,这个过程叫做 Core Dump。
2 Core Dump 的作用
在开发过程中,难免会遇到程序运行过程中异常退出的情况,这时候想要定位哪里出了问题,仅仅依靠程序自身的信息打印(日志记录)往往是不够的,这个时候就需要 Core Dump 文件来帮忙了。
一个完整的 Core Dump 文件实际上相当于恢复了异常现场,利用 Core Dump 文件,可以查看到程序异常时的所有信息,变量值、栈信息、内存数据,程序异常时的运行位置(甚至记录代码行号)等等,定位所需要的一切信息都可以从 Core Dump文件获取到,能够非常有效的提高定位效率。
3 如何生成 Core Dump
前UAP主要使用IBM jdk和SUN jdk,当中间件发生内存溢出时,IBM jdk会自动生成dump文件,而SUN jdk不会生成,所以我们通常推荐使用IBMjdk。
但在有些时候,我们需要分析jvm内存使用情况,例如各分区占用率,哪些对象占用等,需要我们手动生成dump文件,以下说明linux下IBMjdk和SUNjdk手工生成dump文件方法。
第一步:查看进程PID (命令为:ps –ef|grep java);
第二步:进入到jdk目录下 (命令为:cd/data/jdk1.6.0_27)
进入到bin目录下 (命令为:cd bin)
第三部:分析JVM内存
./jmap –heap pid 查看整个JVM的内存使用情况,例如:
./jmap –histo pid 查看JVM中对象内存占用情况
导出整个JVM中的内存信息
jdk/bin目录下生成文件 (命令为:./jmap –dump:format=b,file=[文件名])
例如:./jmap –dump:format=b,file=0807.txt 27054
生成文件为二进制文件,无法直接查看,需要借助jvm分析工具。
自动生成:
1.2自动生成dump文件:
-
-XX:+HeapDumpOnOutOfMemoryError
当OutOfMemoryError发生时自动生成 Heap Dump 文件。这是一个非常有用的参数,因为当你需要分析Java内存使用情况时,往往是在OOM(OutOfMemoryError)发生时。
-
-XX:+HeapDumpBeforeFullGC
当 JVM 执行 FullGC 前执行 dump。 -
-XX:+HeapDumpAfterFullGC
当 JVM 执行 FullGC 后执行 dump。 -
-XX:+HeapDumpOnCtrlBreak
交互式获取dump。在控制台按下快捷键Ctrl + Break时,JVM就会转存一下堆快照。 - -XX:HeapDumpPath=d:\test.hprof
指定 dump 文件存储路径。
注意:JVM 生成 Heap Dump 的时候,虚拟机是暂停一切服务的。如果是线上系统执行 Heap Dump 时需要注意。
2,查看dump文件
推荐使用jdk自带的visualVM,其在JDK_HOME/bin目录下,可搜:jvisualvm。注意:windows系统是jvisualvm.exe文件。
然后装入快照即可。