第6章 JVM故障复盘


文档摘要

第6章 · JVM 故障复盘 章节摘要:JVM 层的故障最考验"从黑盒外部推断内部"的能力。本章三个现场:一次 OOM 的堆内存布局透视;一次 Full GC 停顿的收集器选型复盘;一次依赖包冲突引发的类加载诡异行为。三节合起来,就是 jmap、jstack、GC 日志三件套的完整实战。 学习目标 画出 JVM 运行时数据区布局,按 OOM 类型反推故障区域 读 GC 日志判断停顿根因,说出分代收集器与 G1/ZGC 的取舍 讲清类加载五阶段与双亲委派,用 Arbiter 思路排查 NoClassDefFoundError 与 LinkageError 核心概念速览 内存区域的划分不是教科书配图,是 OOM 报错信息的地名表——每一种 OOM 都精确对应一块区域。 子章节导航 6.

第6章 · JVM 故障复盘

章节摘要:JVM 层的故障最考验"从黑盒外部推断内部"的能力。本章三个现场:一次 OOM 的堆内存布局透视;一次 Full GC 停顿的收集器选型复盘;一次依赖包冲突引发的类加载诡异行为。三节合起来,就是 jmap、jstack、GC 日志三件套的完整实战。

学习目标

  1. 画出 JVM 运行时数据区布局,按 OOM 类型反推故障区域
  2. 读 GC 日志判断停顿根因,说出分代收集器与 G1/ZGC 的取舍
  3. 讲清类加载五阶段与双亲委派,用 Arbiter 思路排查 NoClassDefFoundError 与 LinkageError

核心概念速览

内存区域的划分不是教科书配图,是 OOM 报错信息的地名表——每一种 OOM 都精确对应一块区域。

子章节导航

6.1 一次 OOM 的内存布局透视

OOM 堆 dump 打开后的侦探工作:泄漏大对象、Finalizer 队列、直接内存,三种 OOM 三个走向。

6.2 GC 停顿与收集器选型

P99 毛刺的 GC 日志分析,从 CMS 的碎片到 G1 的 Region 再到 ZGC 的着色指针。

6.3 类加载冲突与双亲委派

同一个类加载出两个 Class 对象的诡异事故,隔离容器的解法。

子章节之间的逻辑关系

三节是 JVM 的三大子系统:内存分配(堆结构)→ 内存回收(GC)→ 类与字节码装载(类加载)。OOM 是分配失衡的终点,长停顿是回收跟不上分配的表现,类加载冲突则是装载体系的秩序问题。

子系统 核心工具 事故形态 ------ -------------- -------------------- 内存 jmap dump MAT OOM 三型 回收 GC 日志 jstat 停顿毛刺 频繁 Full GC 装载 jclassload 日志 NoClassDefFound Linkage 冲突

前置知识与后续延伸

  • 前置:第 2 章引用链、第 5 章线程与池。
  • 为后续铺垫:第 8 章的性能调优方法论与线上排错直接复用本章工具链。

本章的实践建议:把三节的工具各自装进工具箱并演练一次——jmap 与 MAT 在测试环境对一个正常服务做一次 dump 分析,熟悉支配树的读法;给一个 demo 应用开 GC 日志跑压测,亲眼看看 Young 与 Full 的分布形态;再用类加载日志确认某个依赖的实际来源。JVM 排查的难点从来不是命令记不住,而是事故现场的分钟级时间里敢不敢下手。平时练过的动作,深夜才拿得出来。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U