JavaCore 与 HeapDump:
有时致命问题发生后,Java应用不会死掉,还能继续运行;
但有时致命问题发生,Java进程会死掉;为了能够保留Java应用发生致命错误前的运行状态,
JVM在死掉前产生两个文件,分别为JavaCore及HeapDump文件。
他们的区别主要如下表所示:
关键字 | JavaCore | HeapDump |
作用 | 关于CPU的 它能获取应用是否“卡”在某一点上。 例如:数据库查询,长期得不到响应,最终导致系统崩溃等情况。 | 关于内存的 分析系统中是否存在内存溢出。 例如:内存中加载的数据量过于庞大,如一次从数据库取出过多数据。 |
包含内容 | Java应用各线程在某一时刻的运行的位置 (如::时间,类,方法,行数,打开后可以看到每一个线程的执行栈) | 保存了某一时刻JVM堆中对象使用情况,包含: 1.所有的对象信息 2.所有的类信息 3.垃圾回收的根对象 4.线程栈及局部变量 |
文件格式 | 文本文件 (文本编辑器正常打开) | 二进制文件 (使用工具进行分析,如IBM Heap Analyzer这类工具) |
获取方式 | 根据进程号<pid>杀javacore /opt/wildfly/openjdk/openjdk-1.8.0_92/bin/jstack <pid> > javacore`date +%Y%m%d%H%M%S`.txt /opt/wildfly/java64/jdk1.7.0_25/bin/jstack <pid> > javacore`date +%Y%m%d%H%M%S`.txt | JDK 自带的jvisualvm监控工具 在JDK安装目录/bin目录下,可以设置在发生内存溢出时自动生成Dump文件 |