一个核心下单接口在大促开始 5 分钟后,错误率从 0.1% 飙到 15%,同时数据库主库 CPU 打到 100%,下游支付依赖也反馈超时。团队里出现四种声音:立刻回滚最近一次发布、限流非核心流量、给数据库扩只读副本、直接重启应用。请说明你的止损决策顺序和依据,以及你怎么判断这是自身发布引入的问题、还是流量或下游依赖导致的问题。
面试官在考什么
判断候选人在高压故障场景下能否把“止损优先于定位”落地成有依据的动作顺序,是否理解各止损手段的适用边界与副作用。
回答框架 · 前两步
- 止损优先于定位:先用限流、降级、熔断保住核心链路;在重启或回滚前先抓指标、日志、线程栈等现场快照,避免证据丢失。
- 判断变更关联:对齐故障开始时间与发布、配置、依赖变更的时间线,看灰度比例和流量曲线;几小时前的发布不能直接背锅,要看是否存在延迟触发条件。
还有 3 条答案要点、 3 层追问、 4 个常见坑, 以及针对你简历的追问路径,在定制报告里。
同一能力域的其他题
- 生产环境某接口每天偶发几笔“参数校验失败”,现有日志只有一行“invalid param”,没有请求上下文,也无法在测试环境复现。约束:不能重启服务、不能停流量、不能改业务逻辑。你如何在不影响线上稳定的前提下补日志或使用断点定位?请给出操作顺序、日志字段和级别、断点使用条件,以及日志量过大时的控制手段。
- 线上一个服务 QPS 约 5000,某核心接口 P99 约 200ms。存在一个约万分之一概率的数据不一致问题,平均每天出现 3~5 次,本地和压测环境都复现不出来,下一次上线窗口在一周后。现在要在生产现场抓这个问题的证据。请具体说明:你会用日志还是断点(或动态追踪)?日志打在哪一层、打哪些字段、如何控制采样?如果在 5000 QPS 的进程上挂一个阻塞式断点,会造成什么后果,你用什么手段规避?
- 你们的在线推理服务跑在 60 个 Pod 上,高峰 8k QPS,每个请求平均打 12 行 INFO 日志,日志平台按写入量计费。现在日增 30TB、保留 30 天,日志成本已经接近计算成本的一半,但 SRE 依然抱怨出事时日志不够用。请给出你的日志治理方案:分级和采样怎么定、哪些日志必须 100% 保留、如何在量降下来的同时不丢排查能力,以及你打算怎么推动各业务方配合。另外说清楚:生产环境需要看某个 Pod 的详细执行过程时,你会用断点还是动态日志,为什么。
- 一个 Flask 接口线上每天有几次返回 500,日志里只有一行 "handle request failed",没有堆栈;本地用同样的参数打了几千次都复现不了。请说出你接下来会怎么改日志让下一次失败能自证原因:加哪些字段、用什么级别?另外有人提议直接在线上挂断点单步调试,你怎么看?
- 某接口 P99 从 200ms 涨到 1.2s,平均耗时只涨了约 100ms,CPU 使用率没有明显变化,入口 QPS 基本不变。你手上只有该服务的性能剖析工具(CPU profiler、锁分析、GC 日志、链路追踪)和少量机器权限。请说明你会先看什么、再看什么,如何逐步区分是 CPU、锁、GC、IO、下游依赖还是排队导致的长尾。
- 线上服务 QPS 稳定在 2000,业务量没有变化,但接口 P99 从 50ms 恶化到 300ms。机器 CPU 使用率只有 60%,内存指标正常,下游依赖的 RT 监控也没变化。团队第一反应是“扩容加副本”。请说明你的排查路径:你会先看哪些指标,选择哪种 profiling(CPU sampling、wall-clock、off-CPU、锁/GC/IO 等待分析),为什么?在这个场景下扩容能不能解决问题?