高 进阶
线上问题排查经验#
一句话答案#
排查标准流程:止血(降级/限流/回滚)→保留现场(dump/日志)→定位根因→修复→复盘改进。
核心要点
排查流程: 止血(降级/限流/回滚) → 保留现场(dump/日志) → 定位 → 修复 → 复盘
| 问题 | 工具 | 典型根因 |
|---|---|---|
| CPU 100% | top+jstack | 死循环/正则回溯 |
| 内存持续涨 | jmap+MAT | ThreadLocal泄漏 |
| 接口超时 | Arthas | 慢SQL/第三方超时 |
面试回答(2分钟版)
线上问题排查我遵循”止血-保现场-定位-修复-复盘”五步流程。第一步一定是止血而不是查原因,根据情况选择降级、限流或回滚,先把影响范围控制住;第二步在止血的同时保留现场,执行jstack导线程栈、jmap dump堆内存、保存GC日志和业务日志,这些现场数据一旦服务重启就丢了;第三步根据现象选择工具定位根因,CPU飙高用top加jstack看是不是死循环或正则回溯,内存持续增长用jmap加MAT分析是否有内存泄漏比如ThreadLocal没清理,接口超时用Arthas的trace追踪是慢SQL还是下游服务超时;第四步是修复上线,改完要有灰度验证;第五步是复盘,这步面试官特别看重——要分析根因是什么、为什么监控没有提前发现、怎么防止再犯,输出改进项比如补充告警规则、加强代码审查、完善预案。面试时说”从来没出过线上问题”反而不可信,关键是展示你有系统化的排查能力和持续改进的意识。
追问与易错
追问方向:
- “怎么保留现场?”→ 第一时间执行:jstack 导出线程栈、jmap -dump 导出堆内存快照、保存 GC 日志和业务日志、截图监控 Dashboard;这些数据服务重启后就丢了,必须在止血前或同时保留
- “止血和修复优先级?”→ 永远止血优先——先降级/限流/回滚把影响控制住,再慢慢排查根因修复;在故障现场犹豫”要不要回滚”是最大的错误,15 分钟内有变更就先滚再查
- “复盘会怎么开?”→ 按「时间线→根因→影响范围→处置过程→改进项」五部分展开;重点讨论为什么监控没提前发现、怎么防止再犯,产出具体 Action Item(补告警/加预案/改流程)并跟踪落地
易错点:
- ❌ 从来没出过线上问题——不可信
- ❌ 只说问题不说改进