项目排查类场景案例
项目排查类场景案例版面试回答模板
说明:这份内容偏“真实面试回答模板”,适合回答“你线上排查过什么问题”。
1. 接口 RT 飙高怎么答?
回答模板:我会先看监控,确认是单个接口慢,还是整个服务 RT 都升高。 如果只是单接口异常,我会沿调用链拆开看,先看应用线程池和 GC,再看数据库慢 SQL、Redis 命中率、下游 RPC 是否超时。 定位到具体环节后,再针对性处理,比如 SQL 优化、缓存预热、线程池扩容或者降级。
关键词:监控 -> 拆链路 -> 定位最慢环节 -> 针对性优化
2. CPU 飙高怎么答?
回答模板:我一般先用监控确认 CPU 是持续升高还是瞬时抖动。 如果是持续高,就用top找进程,再用top -Hp找线程,最后结合jstack看线程栈。 之前常见到的原因有死循环、频繁 GC、锁竞争、或者某段计算逻辑过重。
关键词:top -> top -Hp -> jstack
3. Full GC 频繁怎么答?
回答模板:我会先看 GC 日志和堆内存曲线,判断是不是老年代回收频繁。 如果 Full GC 后内存回收效果不好,我会优先怀疑内存泄漏,再去导出堆快照分析对象占用和引用链。 如果不是泄漏,就再看是不是堆配置太小、大对象太多、缓存没控制上限。
关键词:GC 日志 -> 堆曲线 -> dump -> 引用链
4. 慢 SQL 排查怎么答?
回答模板:我会先通过慢查询日志定位具体 SQL,再用EXPLAIN看执行计划。 重点看有没有走索引、扫描行数、回表、临时表、文件排序,以及是不是在等锁。 如果是索引问题就补索引或改联合索引,如果是深分页或select *,就改 SQL 写法。
关键词:慢日志 -> explain -> 索引/回表/锁
5. Redis 命中率低怎么答?
回答模板:我会先看命中率是不是持续下降,再结合业务排查是不是 key 设计不合理、过期时间太短、热点数据没预热,或者更新太频繁导致缓存总被删。 如果发现很多请求都回源数据库,还要继续判断有没有缓存穿透问题。
关键词:命中率 -> key 设计 -> 过期时间 -> 回源
6. Redis 变慢怎么答?
回答模板:我会先看 Redis 的 CPU、内存、连接数和慢命令。 然后重点排查是不是大 key、热点 key、持久化阻塞、网络抖动,或者内存打满触发淘汰。 如果是热点 key,就考虑本地缓存、分片或者热点隔离。
关键词:CPU/内存/慢命令 -> 大 key/热点 key
7. MQ 积压怎么答?
回答模板:我会先看生产 TPS 和消费 TPS,确认是不是消费能力跟不上。 然后看消费者线程数、消费逻辑是否过重、数据库或下游接口是否拖慢了消费。 如果积压很严重,先通过扩容消费者、临时降级非核心消费、或者提高并行度止损。
关键词:生产快还是消费慢 -> 消费者扩容 -> 下游排查
8. 数据库连接池满了怎么答?
回答模板:我会先看连接池活跃连接数和等待连接数,再看是不是慢 SQL 太多、大事务太长,或者代码里连接没有及时释放。 如果数据库本身 RT 也升高,就继续往数据库负载和锁等待方向看。
关键词:连接池指标 -> 慢 SQL/大事务/连接泄漏
9. 线程池打满怎么答?
回答模板:我会先看线程池活跃数、队列积压和拒绝次数。 再看线程栈,判断线程是在执行业务逻辑、等数据库、等远程调用,还是锁竞争。 如果是下游慢导致的,就要从依赖链路继续查。
关键词:活跃线程 -> 队列 -> 拒绝 -> 线程栈
10. 服务雪崩怎么答?
回答模板:如果出现雪崩,我的第一反应不是先深挖,而是先止损。 比如限流、熔断、降级、摘流量、关闭非核心功能,先把系统稳住。 之后再看是不是某个核心依赖挂了,或者重试把线程池和连接池都打满了。
关键词:先止损,再找根因
11. 线上问题复盘怎么答?
回答模板:我一般会从五个方面复盘:问题现象、影响范围、根因、临时止损措施、长期优化方案。 长期优化一般会落到监控补齐、阈值报警、代码修复、容量评估和容灾方案上。
关键词:现象 -> 影响 -> 根因 -> 止损 -> 长期优化
12. 面试官追问“你是怎么一步步查到的”怎么答?
回答模板:这类题一定要按时间顺序说,不要直接跳到答案。 先说你看到了什么异常指标,再说你排除了什么方向,最后说你是怎么收敛到根因的。 面试官最看重的是排查路径,不只是最后结论。
关键词:按时间线讲,不要只报结论
13. 项目排查题万能结构
回答模板:
先看监控确认现象
再判断影响范围
再沿调用链拆问题
再结合日志、线程栈、SQL、GC、缓存指标定位根因
最后说明止损和优化方案
关键词:现象 -> 范围 -> 链路 -> 根因 -> 优化