后端面试里,经常会被问“线上服务突然变慢,你怎么处理”。这个问题不只是考 Linux 命令,也在看你有没有事故处理意识。真实线上问题里,最重要的是先判断影响范围,尽量保留现场,再选择恢复动作。
不要一上来就重启
重启可能恢复服务,但也可能丢掉关键现场。面试回答可以说:如果影响范围可控,我会先保留线程堆栈、关键日志、机器资源和最近发布记录;如果已经影响核心业务,就要先降级、扩容、切流或回滚,同时尽量保留最小证据。
这体现的是优先级:用户影响要控制,问题证据也要保留。
排查要分层
服务变慢可以先看资源层:处理器负载、内存、磁盘、网络。再看进程层:是哪一个服务异常。然后看线程层:是在计算、等锁、等数据库,还是等外部接口。最后看日志层:按时间、请求标识、业务单号串起链路。
如果只有单机异常,可能是机器资源或实例问题;如果所有实例异常,更可能是下游依赖、流量突增或发布问题。这个判断会影响恢复动作。
恢复动作要可回滚
恢复服务可以包括限流、降级、扩容、切流、回滚、重启。每个动作都要知道副作用。限流会影响部分用户,降级会减少功能,回滚可能引入数据兼容问题,扩容不一定解决下游瓶颈。
项目回答可以这样说:我会先看监控确认影响范围,再保留日志和线程现场。若是某个接口调用下游超时,先降级非核心功能并限制重试,再推动下游恢复;若是发布引入问题,优先回滚。事故后复盘补充告警、超时和降级开关。
这类回答比背命令更成熟,因为它展示的是完整事故处理链路。
事后复盘也很重要。复盘不是追责,而是补系统能力:这次为什么没有提前发现,告警阈值是否合理,日志里是否缺少请求标识,是否需要加超时、降级或熔断,发布流程是否需要灰度。面试官听到复盘,会更相信你经历过真实线上问题,而不是只知道几个排查命令。
事故排查要先定优先级
线上问题不是答题比赛,顺序很重要。面试里可以明确说:如果核心交易已经受影响,恢复优先;如果影响范围可控,先保留证据再处理。这个判断能体现你不是只会敲命令,而是理解事故处理的取舍。
| 现场信号 | 先做什么 | 不要急着做什么 | 为什么 |
|---|---|---|---|
| 单机 CPU 飙高 | 保留线程栈和热点线程信息 | 直接重启服务 | 重启会抹掉定位证据 |
| 全部实例变慢 | 看下游、网关、数据库和最近发布 | 只盯一台机器 | 全局异常通常不是单机问题 |
| 错误率快速升高 | 限流、降级、回滚或切流 | 等日志慢慢翻完 | 用户影响需要先收敛 |
| 磁盘写满 | 清理可删除日志并确认增长源 | 盲目删除业务文件 | 可能造成二次事故 |
高质量回答还要带复盘意识:这次为什么告警没有更早触发,日志里是否缺少请求标识,降级开关是否可用。面试官听到这些,会更相信你能参与真实线上值班。