近期,收到线上告警,某个接口在中午12点时,突然超时了。
Skywalking/ Arthas 查看接口的耗时
Skywalking/ Arthas 都可以查看接口内各个方法的耗时。
一般情况下,查看到耗时的方法,
- 看下sql 语句,查看执行计划EXPLAIN ,有没有加索引,有没有慢sql。
- 看下查询的代码,有没有加缓存。加缓存可以提高查询速度。
- 看下代码里有没有在循环里面调用数据库/缓存,如果有可以改成批量处理、异步处理。
- 再看下代码里有没有发送短信,发送邮件等耗时操作,能否改用异步处理。
如果没有 Skywalking/Arthas ,也可以通过 StopWatch 进行分析。
详情见: https://blog.csdn.net/sinat_32502451/article/details/133026521
结果,这一次查看了这个接口的耗时代码,发现逻辑简单,只有一个 sql 语句,而且已经加索引了, EXPLAIN 后发现sql语句并没有慢 sql。
那说明超时,有可能并不是这个接口本身的问题。
查看 QPS
打开阿里云,通过阿里云的 WAF 功能,查看 QPS。 接口超时的时间段,QPS 是不是比平常高。
查看 Request rate (请求速率)
打开 grafana, 查看 Request rate,发现在这个接口超时的时间段,系统另一个接口的 Request rate 非常高,占用了大量的数据库连接池,导致了这个接口超时。