一次接口超时排查的记录
线上接口偶发超时,最开始看起来像是网络抖动,但连续几次出现后,还是需要把链路拆开逐项确认。我的习惯是先不急着改代码,而是先确认问题发生的时间、请求参数、上游依赖和服务实例。
排查顺序
第一步看访问日志,确认慢请求是否集中在某几个接口或某类参数。第二步看数据库慢查询和连接池使用情况,确认是否存在等待连接或锁等待。第三步看上游依赖响应时间,避免把外部服务慢误判成本服务慢。
grep "timeout" app.log grep "request_id=xxx" access.log mysqladmin processlist
复盘
这类问题的关键是保留可追踪的请求编号,并把每个阶段耗时打出来。日志足够完整时,偶发问题也可以被拆成几个明确的检查项。