记一次线上故障排查

上周三凌晨 2 点,监控告警:API 响应时间超过 5 秒。

故障现象

  • 所有接口响应缓慢
  • 数据库连接池耗尽
  • 部分用户 502

排查过程

第一步:看日志

tail -f /var/log/app/error.log

发现大量 Connection timeout 错误。

第二步:查数据库

SHOW PROCESSLIST;

发现有几十个慢查询在排队。

第三步:定位慢查询

EXPLAIN SELECT * FROM orders WHERE ...

原来是一个新上线的功能没有加索引。

第四步:紧急处理

  1. Kill 掉慢查询
  2. 添加缺失索引
  3. 重启应用释放连接池

事后复盘

  1. 新功能上线前缺少 SQL Review
  2. 慢查询监控告警阈值设置不合理
  3. 缺少数据库连接池监控

改进措施

  • 上线前必须 SQL Review
  • 增加慢查询告警
  • 完善监控面板

凌晨的故障最考验团队,这次学到了很多。

添加新评论