日期:2026-07-11
标签:#面试 #八股 #后端 #系统设计 #场景题
一句话答案
固定时间发生的故障优先排查定时任务、批处理、备份、日志切割、缓存集中失效和外部依赖窗口,并通过时间相关性和资源曲线定位证据。
面试口语版
这种每天固定时段的问题很像周期性任务造成的资源争抢。我会先确定准确起止时间和影响范围,叠加查看 CPU、内存、GC、磁盘 I/O、数据库连接、锁等待、线程池和下游延迟,然后对照 Cron、数据同步、报表、备份、全量扫描、日志归档和证书/Token 刷新任务。常见情况是大 SQL 锁表、备份打满 I/O、缓存统一过期形成雪崩,或批处理占满线程池。先通过错峰、限速、资源隔离或暂停任务验证,再做根因修复。
可能原因
- 数据库备份、统计报表、ETL 全量扫描、分区维护。
- 缓存同一 TTL 集中失效,瞬间压垮数据库。
- JVM 定时全量任务产生大量对象,引发连续 Full GC。
- 日志压缩/切割、磁盘快照或磁盘空间临界。
- 线程池或连接池被批任务占满,在线流量饥饿。
- 上游流量周期峰值、第三方维护窗口、DNS/证书/Token 周期刷新异常。
高分补充
不要先重启。重启会销毁现场,应先保留线程栈、GC 日志、慢查询、锁等待、系统指标和 Trace 样本;应急止损后再离线分析。
面试官追问
- 如何证明是缓存雪崩?
- 如何隔离在线和离线任务资源?
- 数据库锁表如何定位?
面试官追问参考答案
1. 如何证明是缓存雪崩?
检查故障时缓存命中率是否骤降、过期 Key 数量是否突增,同时 Redis 流量下降或变化而数据库 QPS、连接和慢查询同步飙升。抽样 TTL 分布和请求 Trace,若大量 Key 在同一时间过期且回源占满数据库,证据链基本成立。
2. 如何隔离在线和离线任务资源?
数据库使用独立账号、连接池、只读副本和资源组限制离线查询;计算层分线程池、队列、容器和节点,设置 CPU/内存/I/O 配额。任务错峰、限速和分批运行,在线指标恶化时自动暂停离线任务。
3. 数据库锁表如何定位?
查看数据库活动会话、锁等待图、长事务和当前 SQL,例如 MySQL 的 performance_schema、SHOW ENGINE INNODB STATUS。找到阻塞链根节点后确认业务和事务持续时间,止损前评估回滚成本;根治长事务、缺失索引、批量更新和不一致加锁顺序。