上周三凌晨 2 点,监控告警:API 响应时间超过 5 秒。
故障现象
- 所有接口响应缓慢
- 数据库连接池耗尽
- 部分用户 502
排查过程
第一步:看日志
tail -f /var/log/app/error.log发现大量 Connection timeout 错误。
第二步:查数据库
SHOW PROCESSLIST;发现有几十个慢查询在排队。
第三步:定位慢查询
EXPLAIN SELECT * FROM orders WHERE ...原来是一个新上线的功能没有加索引。
第四步:紧急处理
- Kill 掉慢查询
- 添加缺失索引
- 重启应用释放连接池
事后复盘
- 新功能上线前缺少 SQL Review
- 慢查询监控告警阈值设置不合理
- 缺少数据库连接池监控
改进措施
- 上线前必须 SQL Review
- 增加慢查询告警
- 完善监控面板
凌晨的故障最考验团队,这次学到了很多。