最近在研究 Java Core Dump 查看及使用问题,这里我采了JDK自带工具 jvisualvm ,这个工具可协助生成 Java Core Dump 文件
1, Java Core Dump 文件是什么
Java Core Dump 文件呢,是针对 JVM 虚拟机发生致命问题或者 JVM 中运行的程序造成致命问题时,所产生的记录文件,通常会存在2个文件
1.1,Java Core 文件,线程记录文件,即 ThreadDump 文件
1.2,Head Dump 文件,Cpu. 内存,堆内存等信息记录文件
2,JVM 可以做什么
2.1,内存问题分析
2.2,线程问题分析
3,hs_err_pid.log 文件
在 JVM 出现异常宕机时,会生成 hs_err_pid1.log 日志文件记录, 文件名中 1 为JAVA运行的进程ID,该文件记录了 JVM 宕机时线程状态,过程状态等信息,可以用于基础判定程序问题
4,生成 Java Core Dump 文件
Java环境变量如果配置Ok的话, CMD 下执行 jvisualvm 命令, 会启动 jvisualvm 程序,此程序为 JVM 状态,内存,线程,Cpu等内容的监视工具
工具中,堆Dump 可生成 Head Dump 文件,文件格式为 .hprof
线程Dump,可生成 Java Core 文件,也就是 ThreadDump 文件,文件格式为 .tdump
此时,Java Core Dump 文件生成完毕
5, Java Core Dump 文件图形化查看工具
生成的 Java Core Dump 的两个文件查看,分别需要使用到2个不同的工具
Jac 工具《IBM Thread and Monitor Dump Analyzer for Java》:用于查看 ThreadDump 文件内容, Jac下载地址
Ha 工具《IBM HeapAnalyzer》:用于查看 HeadDump 文件内容, Ha下载地址
Jac 下载后的文件名 jacxxx.jar, xxx为当前jac工具版本号
Ha 下载后的文件名 haxxx.jar, xxx为当前jac工具版本号
java -jar jacxxx.jar/haxxx.jar 来启动2个不同的工具,并导入对应的文件即可
图例:
6,手动生成 ThreadDump 文件,目前未找到好的替代方法
替代方案1:直接kill进程,生成 ThreadDump 文件
替代方案2
6.1, 手动生成文件
/lib/jvm/java-1.8.0-openjdk-1.8.0.232.b09-0.el7_7.x86_64/bin/jstack > 【存储 ThreadDump 文件.txt】 【进程ID】
6.2, 文件查看 在线查看器
7,手动生成 HeadDump 文件
手动生成HeadDump文件呢,需要使用到 jmap 命令
7.1,第一步,查看 java 程序运行进程编号
ps -ef | grep java
7.2,第二步,执行命令生成文件
jmap -dump:format=b,file=【存储 HeadDump 文件】 【进程ID】
例:
jmap -dump:format=b,file=serviceDump.dat 1
7.3,第三步,使用 haxxx.jar 工具打开 HeadDump 文件即可查看
对于Java性能分析呢,不止 JVisualVM 一种工具, 还有其他很多工具及插件可以使用
当Java虚拟机报错,或异常退出时,Linux 系统也会自动记录一个 Core Demp 的文件,Linux系统默认是未开启的,如果有需要,可以自行了解一下