Core Dump 核心转储
一、简介
程序运行过程中异常退出定位,查看到程序异常时的所有信息,变量值、栈信息、内存数据,程序异常时的运行位置(甚至记录代码行号)等等
jdk/bin目录下
./jmap –dump:format=b,file=[文件名] PID
生成文件为二进制文件,无法直接查看,需要借助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文件。
####二、jmap命令
jmap命令可以获得运行中的jvm的堆的快照,从而可以离线分析堆,以检查内存泄漏,检查一些严重影响性能的大对象的创建,检查系统中什么对象最多,各种对象所占内存的大小等等
jmap [options] pid
-dump:[live,]format=b,file= --dump堆到文件,live指明是活着的对象,file指定文件名
因为在dump:live前会进行full gc,因此不加live的堆大小要大于加live堆的大小
-finalizerinfo 打印等待回收对象的信息
-heap 打印堆总结
-histo[:live] 打印堆的对象统计,包括对象数、内存大小等等
-permstat 打印java堆perm区的classloader统计 -F 强制,在jmap -dump或jmap -histo中使用,如果pid没有相应的回复
-J 提供jvm选项,如:-J-Xms256m