现场快照类型与采集时机
线上故障发生时,采集哪种快照、何时采集、如何采集,直接决定了问题能否被快速定位。本章围绕七种核心现场快照——堆转储(Heap Dump)、线程转储(Thread Dump)、内存快照、CPU Profile、GC日志、系统日志、网络抓包——按照“现象识别 → 数据采集 → 原因定位 → 修复动作 → 复测 → 预防”的主线,建立一套可复用的快照采集决策体系。
3.1 现象识别:匹配快照与故障场景
不同故障现象对应不同的快照类型。下表归纳了7种常见线上异常与推荐快照的对应关系,以及采集的优先级。
| 故障现象 | 推荐快照类型 | 优先级 | 典型表现 |
|---|---|---|---|
| 内存溢出(OOM)、堆使用率持续高位 | Heap Dump、Memory Snapshot | P0 | java.lang.OutOfMemoryError、GC overhead limit exceeded |
| 线程死锁、线程挂起、线程数飙升 | Thread Dump | P0 | 应用无响应、http 503、线程BLOCKED状态堆积 |
| CPU 使用率持续飙高(>90%) | CPU Profile、Thread Dump | P0 | top 显示进程CPU高、请求响应变慢 |
| 频繁 Full GC / STW 时间过长 | GC Log、Heap Dump | P1 | 监控告警 GC 暂停 >1s、吞吐量下降 |
| 系统异常、OOM Killer、进程被 kill | System Log(dmesg、syslog) | P1 | 进程突然消失、dmesg 显示 oom_killer |
| 网络超时、丢包、连接异常 | 网络抓包(Packet Capture) | P1 | timeout、connection reset、retransmission 上升 |
| 内存泄漏怀疑、堆外内存异常 | Memory Snapshot、Heap Dump | P2 | 内存趋势持续上升、堆外内存使用异常 |
采集时机铁律:Heap Dump 必须在 OOM 发生之后 立即采集,不要等待;Thread Dump 需要在 问题持续期间 连续采集 3-5 次(间隔 10s);网络抓包要 提前启动 循环抓取,保留最近 1 小时的滚动文件。
下面是一张 现场快照采集决策树,帮助你在故障发生时快速判断应该采集哪种快照: