Java/JVM 常见诊断文件对比

Java/JVM 常见故障诊断文件速查表

Java 应用出现异常、OOM、频繁 GC 或 JVM 崩溃时,通常会接触到多种日志和 Dump 文件。不同文件记录的是不同层面的现场信息,不能混用。

下面对常见的应用日志、GC 日志、Fatal Error Log、Heap Dump、Crash Dump 和 JFR 进行统一对比。

特性 应用日志 GC日志 hs_err_pid Heap Dump(.hprof) Crash Dump(.mdmp/core) JFR(.jfr)
主要来源 Logback、Log4j2 等 JVM GC 日志 HotSpot Fatal Error JVM Heap Dump 操作系统 / 调试器 Java Flight Recorder
生成时机 应用运行期间 JVM 运行、GC 发生时 JVM 发生致命错误时 手动导出或配置 OOM 自动生成 进程 / JVM native crash 时 运行过程中持续或按需录制
常见生成方式 日志框架配置 -Xlog:gc* JVM 自动生成 jcmd GC.heap_dumpjmap-XX:+HeapDumpOnOutOfMemoryError WinDbg、系统 Core Dump 等 jcmd JFR.start/dump-XX:StartFlightRecording
主要内容 业务上下文、异常信息 GC 事件、堆变化、暂停时间 崩溃线程、Native 栈、JVM / 系统状态 Java 堆对象及引用关系 进程内存、线程、Native 状态 CPU、GC、线程、锁、对象分配、I/O 等事件
文件大小 KB~GB,视日志量而定 通常较小 通常较小 通常很大 通常很大 可控
常用分析工具 文本编辑器、日志平台 文本、GC 分析工具 文本编辑器 Eclipse MAT、VisualVM WinDbg、gdb / lldb 等 JDK Mission Control、jfr
最擅长 业务异常定位 GC 性能与内存趋势分析 JVM / Native 崩溃初步定位 OOM、内存泄漏、大对象、引用链分析 Native Crash 深度分析 性能、CPU、GC、锁、I/O、线程综合分析
是否适合定位对象泄漏 间接 只能看趋势 通常不适合 非常适合 不以此为主 可观察分配和增长趋势
典型问题 "业务为什么报错?" "为什么 GC 这么频繁?" "JVM 为什么崩了?" "谁把堆内存占满了?" "Native 层为什么崩了?" "系统为什么慢、卡、CPU 高?"

可以简单记忆:

text 复制代码
业务问题
    ↓
应用日志

GC问题
    ↓
gc.log

JVM致命崩溃
    ↓
hs_err_pid

Java堆问题
    ↓
.hprof

Native崩溃
    ↓
.mdmp / core

综合性能现场
    ↓
JFR

核心区别可以概括为:

日志看"发生过什么",Heap Dump 看"堆里有什么、谁引用谁",Crash Dump 看"进程 / Native 层崩溃现场",JFR 更适合还原一段时间内 JVM 的综合运行状态。

相关推荐
Zane19941 小时前
复制算法明明要浪费一半内存,为什么新生代还偏偏用它
java·后端
ttwuai1 小时前
Go 后台初始化 MySQL 脚本失败怎么办?先查 DDL 还是生成配置
开发语言·mysql·golang
2601_962885721 小时前
如何用 Python 做 A 股全市场扫描选股?(多条件筛选实战)
开发语言·python
toolsmith1 小时前
AI能替你读代码,但替代不了你积累洞察力:一次YouTrack逆向实战全记录
java·源码阅读
步行cgn1 小时前
Spring Boot 绑定简单 Bean 详解
java·spring boot·后端
鹿角片ljp1 小时前
我如何用 Frontend Design Skill 重构平台
java
未秃头的程序猿1 小时前
分库分表一年后,我复盘了当时最该想清楚的三件事
java·数据库·后端
岁月如歌77861 小时前
顺序消息与幂等消费完全指南:从队列有序到接口幂等
java·后端·架构
秋名RG1 小时前
Java 泛型深度解析:从类型安全到现代实践(JDK 21 视角)
java·windows·安全